我試圖創建一個像這樣的多維物件:
{ A : {a1: {},a2:{}}, B: {b1:{},b2:{}}}
來自這樣的多維陣列:
let array1 = [
['A', 'a1'],
['A', 'a1'],
['A', 'a2'],
['B', 'b1'],
['B', 'b1'],
['B', 'b2'],
];
我已經嘗試了幾個小時,并且還在 stackoverflow 上閱讀了大量條目,但沒有什么真正適合這種特定情況。
到目前為止我做了什么:
let array1 = [
['A', 'a1'],
['A', 'a1'],
['A', 'a2'],
['B', 'b1'],
['B', 'b1'],
['B', 'b2'],
];
let object1 = {};
array1.forEach(function (subArray) {
let level1 = subArray[0];
let level2 = subArray[1];
object1[[level1]] = { ...{ [level2]: {} } };
});
console.log('object: ', object1);
//desired output: object = { A : {a1: {},a2:{}}, B: {b1:{},b2:{}}}
//what I get: object = { A : {a2:{}}, B: {b2:{}}}
所以在我的代碼中,像 {a1: {}} 這樣的條目在每次迭代中都會被覆寫,而不是添加一個新條目。
非常感謝。
uj5u.com熱心網友回復:
您可以使用Array.reduce()以及一些解構來獲得所需的物件輸出。
對于原始陣列中的每個鍵值對,我們向最終物件添加一個屬性(例如'A'),然后為陣列中的每個值添加一個新物件(例如'a1'、'a2')。
let array1 = [ ['A', 'a1'], ['A', 'a1'], ['A', 'a2'], ['B', 'b1'], ['B', 'b1'], ['B', 'b2'], ];
let output = array1.reduce((acc, [k,v]) => {
acc[k] = { ...(acc[k] || {}), [v]: {} };
return acc;
}, {})
console.log(output)
.as-console-wrapper { max-height: 100% !important; top: 0; }
人們也可以在一行中做到這一點,但我認為閱讀(和理解)要困難得多:
let array1 = [ ['A', 'a1'], ['A', 'a1'], ['A', 'a2'], ['B', 'b1'], ['B', 'b1'], ['B', 'b2'], ];
let output = array1.reduce((acc, [k,v]) => ({ ...acc, [k]: { ...(acc[k] || {}), [v]: {} } }), {});
console.log(output)
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
使用...object1[[level1]]以下方法保留以前的屬性:
let array1 = [
['A', 'a1'],
['A', 'a1'],
['A', 'a2'],
['B', 'b1'],
['B', 'b1'],
['B', 'b2'],
];
let object1 = {};
array1.forEach(function (subArray) {
let level1 = subArray[0];
let level2 = subArray[1];
object1[[level1]] = {
...object1[[level1]], // Keep previous properties
...{ [level2]: {} } // Add new
};
});
console.log('object: ', object1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/364901.html
標籤:javascript 多维数组 javascript对象
下一篇:如何在JSON路徑中使用路徑變數
