为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 在嵌套的 js 对象上查找元素

JavaScript 在嵌套的 js 对象上查找元素

守着星空守着你 2023-04-14 16:20:27
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)));当 ItemCid 与 id 匹配时,我正在尝试查找 ItemCTitle。上面的代码作为一个整体返回 ItemAID:2 对象,而不是返回嵌套的变量值。任何线索表示赞赏。
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

使用Array.reduce你可以提取 only 的数组ItemC,并且可以很容易地找到那里的项目。


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);


查看完整回答
反对 回复 2023-04-14
?
RISEBY

TA贡献1856条经验 获得超5个赞

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



查看完整回答
反对 回复 2023-04-14
  • 2 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信