猿问

如何在 Javascript 中过滤嵌套对象

我将如何在嵌套项目上使用 filter() ?我正在尝试检索具有 projex.HeightPay === '1' 的所有数据。如果 HeightPay 为 1,我想取回 Id、Name、System 等和项目项目。


例如:


  const fakeData = [

  {

    Id: "022173333101",

    Name: "Blue",

    System: "DESIGN",

    Squares: 0,

    Attributes: {

      projex: [

        {

          Project: "50",

          HeightPay: "1"

        },

        {

          Project: "50",

          HeightPay: "0"

        }

      ]

    },

    Customer: {

      Addr1: "Somewhere",

      Addr2: ""

    }

  }

];


// returns nothing

const found = fakeData.filter(data => data.Attributes.projex.HeightPay === "1");

期望的输出:


  {

    Id: "022173333101",

    Name: "Blue",

    System: "DESIGN",

    Squares: 0,

    Attributes: {

      projex: [

        {

          Project: "50",

          HeightPay: "1"

        }

      ]

    },

    Customer: {

      Addr1: "Somewhere",

      Addr2: ""

    }

  }


九州编程
浏览 258回答 2
2回答

交互式爱情

您可以使用Array.prototype.map遍历数组的每个元素,然后使用fakeData过滤子数组并从每次迭代的调用中返回一个新对象Attributes.projexArray.prototype.filtermap调用中的新对象Array.prototype.map是通过使用对象扩展运算符获取每个元素的所有属性(属性除外) ,然后将新数组从分配给每个新对象:fakeData...Attributes.projexAttributes.projexArray.prototype.filterconst fakeData = [ { Id: "022173333101", Name: "Blue", System: "DESIGN", Squares: 0, Attributes: { projex: [ { Project: "50", HeightPay: "1" }, { Project: "50", HeightPay: "0" } ] }, Customer: { Addr1: "Somewhere", Addr2: "" } } ];const found = fakeData.map(data => ({  ...data,  Attributes: {    projex: data.Attributes.projex.filter(({      HeightPay    }) => HeightPay === "1")  }}));console.log(found);

鸿蒙传说

const result = fakeData.map(item => ({        ...item,        Attributes: {                projex: item.Attributes.projex.filter(e => e.HeightPay === "1")        }}))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答