[英]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.