簡體   English   中英

JavaScript 使用鍵數組從值數組更新字典

[英]JavaScript Updating a dictionary from array of values using array of keys

我有一個字典(嵌套)、一個鍵數組和一個值數組。 我需要使用鍵數組作為地址使用給定值更新字典。 例子:

dict = {"a":{"b":[{"c":1,"d":2},{"c":3,"d":4}]}}  
address = [["a","b",0,"c"],["a","b",1,"d"]]  
value = [10,40]

所需的輸出是:

dict = {"a":{"b":[{"c":10,"d":2},{"c":3,"d":40}]}}

我怎樣才能在 JavaScript 中做到這一點?

您可以按照以下方式做一些事情:

 const dict = {"a":{"b":[{"c":1,"d":2},{"c":3,"d":4}]}}, address = [["a","b",0,"c"],["a","b",1,"d"]], value = [10,40]; // For each address address.forEach((path, index) => { let el = dict; // For each address fragment for (let i = 0; i < path.length; i++) { // If it's not the last fragment if (i < path.length - 1) { // Navigate to the next el = el[ path[i] ]; } else { // Otherwise, set the value el[ path[i] ] = value[index]; } } }); console.log(JSON.stringify(dict));

您可以使用一個函數來設置值並減少到內部屬性的路徑。

 function setValue(object, [...keys], value) { var last = keys.pop(); keys.reduce((o, k) => o[k], object)[last] = value; } var dict = { a: { b: [{ c: 1, d: 2 }, { c: 3, d: 4 }] } }, address = [["a", "b", 0, "c"], ["a", "b", 1, "d"]], value = [10, 40], i, l = address.length; for (i = 0; i < l; i++) setValue(dict, address[i], value[i]); console.log(dict);

暫無
暫無

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

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