[英]set array based on an array of indexes
我想根據索引列表在嵌套的 object 結構中設置 boolean 值
我要更新的數據如下所示:
let categories = [{
"name": "Cat 1",
"subs": [{
"name": "Sub Cat 1.1",
"subs": [],
"checked": false
},
{
"name": "Sub Cat 1.2",
"subs": [],
"checked": false
}
],
"checked": false
},
{
"name": "Cat 2",
"subs": [],
"checked": false
}
];
索引存儲在一個數組中:
let categoryIndexs = [0,1]
因此,基於categoryIndexs
我想將name
“Sub Cat 1.2”的 object 的checked
屬性更改為true
。
這就像轉換數組[0,1]
以查找categories[0].subs[1]
並更新其checked
屬性。
到目前為止,我設法獲取了值並分別對其進行了編輯,但是如何直接更改categories
變量呢?
let categoryIndexs = [0,1]
let tmp_array = categories;
for(var i = 0; i < categoryIndexs.length;i++){
if(i == 0){
tmp_array = tmp_array[categoryIndexs[i]]
} else {
tmp_array = tmp_array.subs[categoryIndexs[i]]
}
}
tmp_array.checked = true
console.log(tmp_array)
解決方案需要是動態的,因此如果“Sub Cat 1.2”在其自己的subs
數組中有一個嵌套條目,我可以使用[0,1,0]
之類的categoryIndexs
訪問它
您可以在循環中迭代給定的索引,同時 go 在您的數據結構中更深,就像在這個 function 中一樣:
function setChecked(categories, categoryIndexes) { let obj = null; for (let index of categoryIndexes) { obj = categories[index]; categories = obj.subs; } obj.checked = true; } let categories = [{"name": "Cat 1","subs": [{"name": "Sub Cat 1.1","subs": [],"checked": false},{"name": "Sub Cat 1.2","subs": [],"checked": false}],"checked": false},{"name": "Cat 2","subs": [],"checked": false}]; setChecked(categories, [0,1]); console.log(categories);
您可以使用reduce
來獲取最后一個subs
直到最后一個subs
並更新checked
的屬性
let categories = [{"name": "Cat 1","subs": [{"name": "Sub Cat 1.1","subs": [],"checked": false},{"name": "Sub Cat 1.2","subs": [],"checked": false}],"checked": false},{"name": "Cat 2","subs": [],"checked": false}]; let categoryIndexs = [0, 1]; function update(categories, indices) { const last = indices.pop(); // remove the last const redued = indices.reduce((acc, i) => acc[i].subs, categories); redued[last].checked = true; return categories } console.log(update(categories, categoryIndexs))
您可以通過查看迭代的索引並獲取subs
或 item 來減少數組。
const getValue = (subs, indices) => indices.reduce( ({ subs }, i) => subs[i], { subs } ); let categories = [{ name: "Cat 1", subs: [{ name: "Sub Cat 1.1", subs: [], checked: false }, { name: "Sub Cat 1.2", subs: [], checked: false }], checked: false }, { name: "Cat 2", subs: [], checked: false }], indices = [0, 1]; console.log(getValue(categories, indices, 'subs'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.