【问题标题】:Filtering array based on selected object in JSJS中根据所选对象过滤数组
【发布时间】:2023-01-26 03:38:06
【问题描述】:

尝试根据所选对象获取过滤后的数组。我如何遍历对象内部的damaged数组并获得结果数组?我尝试使用 .map 添加另一个条件,但它也会打印其余项目。

下面是sn-p

const inventory = [{
  name: 'Jeep',
  id: '100',
  damaged: [{
      name: 'Wrangler',
      id: '200'
    },
    {
      name: 'Sahara',
      id: '201'
    }
  ]
}, {
  name: 'Audi',
  id: '101',
  damaged: [{
    name: 'Q3',
    id: '300'
  }]
}]

const purchasedCars = [{
    car: 'Jeep',
    id: '100'
  }, {
    car: 'Jeep - Wrangler',
    id: '200',
  },
  {
    car: 'Jeep - Sahara',
    id: '201'
  },
  {
    car: 'Audi - Q3',
    id: '300'
  }
]

const selectedCar = purchasedCars[0];

const filterCars = () => {
  const result = purchasedCars.filter((inv) => inv.id === selectedCar.id)
  console.log('result -->', result);
}

filterCars();

预期输出是

[{
    car: 'Jeep',
    id: '100'
  }, 
 {
    car: 'Jeep - Wrangler',
    id: '200',
  },
  {
    car: 'Jeep - Sahara',
    id: '201'
}]

有人可以帮忙吗?

【问题讨论】:

  • 请详细说明您要做什么。为什么这是预期的输出?
  • 您没有在代码中使用 inventory 数组。你能试着更清楚地解释你想做什么吗?

标签: javascript


【解决方案1】:

试图在这里读懂你的想法。这是你想要的吗?

const inventory = [{
  name: 'Jeep',
  id: '100',
  damaged: [{
      name: 'Wrangler',
      id: '200'
    },
    {
      name: 'Sahara',
      id: '201'
    }
  ]
}, {
  name: 'Audi',
  id: '101',
  damaged: [{
    name: 'Q3',
    id: '300'
  }]
}]

const purchasedCars = [{
    car: 'Jeep',
    id: '100'
  }, {
    car: 'Jeep - Wrangler',
    id: '200',
  },
  {
    car: 'Jeep - Sahara',
    id: '201'
  },
  {
    car: 'Audi - Q3',
    id: '300'
  }
]

const selectedCar = purchasedCars[0];

const filterCars = () => {
  let result;
  const parentItem = inventory.filter((inv) => inv.id === selectedCar.id)[0];
  
  if ("damaged" in parentItem) {
      result = [selectedCar, ...(parentItem.damaged)];
  }
  
  console.log('result -->', result);
}

filterCars();

请注意,如果您可以在 damaged 属性中拥有更多嵌套汽车类型,您将递归调用 filterCars 并传入汽车对象。如果您还想过滤可能也存在于 damaged 属性中的项目,那么您首先需要使用 flatMap 方法(在 filter 之前)。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 2022-11-01
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2021-03-21
    相关资源
    最近更新 更多