开发者问题收集

在 JavaScript 中对数组进行过滤后构造对象数组

2020-09-10
51

我能够过滤数组,但当我尝试从过滤后的数据中创建对象数组时,结果似乎为 undefined 。如何构建以下格式的对象数组。有人能帮忙吗?

[{ brand: 'BMW'}, { brand: 'Audi'}]
const cars = [{
  name: 'BMW',
  type: 'Sedan'
}, {
  name: 'Audi',
  type: 'SUV'
}, {
  name: 'BMW',
  type: 'SUV'
}]

const result = cars.filter(({
  type
}) => type === 'SUV').map((car) => {
  brand: car.name
})

console.log(result)
3个回答

如果要从箭头函数返回对象文字,则需要将该对象文字括在括号中,以将其与代码块区分开来,代码块也恰好括在花括号中:

result = cars.map(car => ({
  brand: car.name
}));

有趣的是,您的代码不会导致错误。这只是因为 JavaScript 中有一个 标签语法 ,因此箭头函数内的代码基本上会创建一个 brand 标签,其值为 car.name

Robo Robok
2020-09-10

基本上,您需要将对象括在括号中,以将其与块语句区分开来。

const
    cars = [{ name: 'BMW', type: 'Sedan' }, { name: 'Audi', type: 'SUV' }, { name: 'BMW', type: 'SUV' }],
    result = cars
        .filter(({ type }) => type === 'SUV')
        .map(({ name: brand }) => ({ brand }));
        //                        ^^^^^^^^^^^  wrap it

console.log(result);
Nina Scholz
2020-09-10

您在 map 函数中隐式返回的新对象周围缺少一对括号。这是 es6 的一个棘手语法。

const cars = [{
  name: 'BMW',
  type: 'Sedan'
}, {
  name: 'Audi',
  type: 'SUV'
}, {
  name: 'BMW',
  type: 'SUV'
}]

const result = cars.filter(({
  type
}) => type === 'SUV').map((car) => ({
  brand: car.name
}))

console.log(result)
jchung201
2020-09-10