簡體   English   中英

如何在javascript上使用動態鍵設置嵌套對象

[英]How to set nested object with dynamic keys on javascript

let foo = {};

const key1 = 'a';
const key2 = 'b';
const key3 = 'c';

foo[key1][key2][key3] = [1, 2];

當我嘗試做類似的事情時,我得到:

Uncaught TypeError: Cannot read property 'b' of undefined

您必須先創建嵌套對象,然后才能在其中創建屬性。

 let foo = {} const key1 = 'a' const key2 = 'b' const key3 = 'c' foo[key1] = {}; foo[key1][key2] = {}; foo[key1][key2][key3] = [1, 2]; console.log(foo); 

如果在數組中動態生成鍵列表,請參閱從數組中填充嵌套對象? 用於創建所有對象的函數。

您還可以使用動態鍵創建文字對象。 只需確保在必要時創建嵌套對象,如@Barmar所示。

 const key1 = 'a' const key2 = 'b' const key3 = 'c' let foo = { [key1]: { [key2]: { [key3]: [1, 2] } } }; console.log(foo.abc); 

您可以創建一個帶有三個參數的函數:

  • 將添加鍵的對象。
  • 按鍵數組按順序排列。
  • 將設置為最后一級的值。

使用forEach循環來循環鍵。 除最后一個索引外,向鍵添加空{} 並將當前對象更改為該空對象。

 let foo = {} function nestedKey(obj,keys,value){ keys.forEach((x,i) => { obj[x] = i === keys.length -1 ? value : {}; obj = obj[x] }) } nestedKey(foo,['a','b','c'],[1,2]); console.log(foo) 

使用Array#reduce將使這成為可能,但是密鑰需要在列表中並且順序相反。

 const key1 = 'a' const key2 = 'b' const key3 = 'c' const foo = [key3, key2, key1].reduce((a,c)=>({[c]:a}), [1, 2]); console.log(foo); 

嘗試(改進Barmar 答案,無需重復鍵)

 let foo = {}, t; const key1 = 'a'; const key2 = 'b'; const key3 = 'c'; t= foo[key1]= {}; t= t[key2]= {}; t[key3]= [1, 2]; console.log(foo); 
如果foo有更多(嵌套)值,它們將被保存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM