简体   繁体   中英

JavaScript find element on nested js object

let object = [{
    "ItemAID" : 1,
    "ItemADesc" : [ {
      "ItemBid" : 11,
      "ItemBDesc" : [ {
        "ItemCid" : 111,
        "ItemCTitle" : "TitleC111",
      }, {
        "ItemCid" :112,
        "ItemCTitle" : "TitleC112",
      } ]
    }]},

    {
        "ItemAID" : 2,
        "ItemADesc" : [ {
          "ItemBid" : 21,
          "ItemBDesc" : [ {
            "ItemCid" : 211,
            "ItemCTitle" : "TitleC211",
          }, {
            "ItemCid" :212,
            "ItemCTitle" : "TitleC212",
          } ]
        }]}]
console.log(X.find(A => A.ItemADesc.find(B => B.ItemBDesc.find(C=>C.ItemCid === 212)?.ItemCTitle)));

I am trying to Find ItemCTitle when ItemCid matches with id. Above code returns ItemAID:2 object as a whole, instead of returning nested variable value. Any leads is appreciated.

Using Array.reduce you can extract the array of ItemC only and can find the item there easily.

 let input = [{ "ItemAID" : 1, "ItemADesc" : [ { "ItemBid" : 11, "ItemBDesc" : [ { "ItemCid" : 111, "ItemCTitle" : "TitleC111", }, { "ItemCid" :112, "ItemCTitle" : "TitleC112", } ] }]}, { "ItemAID" : 2, "ItemADesc" : [ { "ItemBid" : 21, "ItemBDesc" : [ { "ItemCid" : 211, "ItemCTitle" : "TitleC211", }, { "ItemCid" :212, "ItemCTitle" : "TitleC212", } ] }]}]; const itemC = input.reduce((acc, cur) => { if (cur['ItemADesc'] && cur['ItemADesc'].length > 0) { cur['ItemADesc'].forEach(({ ItemBDesc }) => { if (ItemBDesc.length > 0) { acc.push(...ItemBDesc); } }); } return acc; }, []).find(({ ItemCid }) => ItemCid === 211); console.log(itemC.ItemCTitle);

您可以使用名为d-forest 的库来查找深度嵌套的对象。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM