簡體   English   中英

根據索引數組設置數組

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

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