gpt4 book ai didi

javascript - 过滤数组以获取 ES6 中的对象数组

转载 作者:行者123 更新时间:2023-12-04 09:34:43 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Filter array of objects based on another array in javascript

(10 个回答)


去年关闭。




如何过滤数组以将结果作为对象数组?
这就是我想要做的

const getCars = (cars, carNames) => {
const result = carNames.map((carName) =>
cars.filter(
(car) =>
car.name === carName
)
);
console.log('result', result);
return result;
};

const cars = [{
name: 'BMW',
type: '2020'
}, {
name: 'Audi',
type: '2019'
}, {
name: 'Benz',
type: '2018'
}]

getCars(cars, ['BMW', 'Benz']);

我期望输出是一个对象数组,但我得到的是数组数组。有人可以帮忙吗?
[{name: 'BMW', type: '2020'},{name: 'Benz', type: '2018'}]

最佳答案

你得到一个数组数组,因为 Array#map 将数组中的每个元素转换为使用元素调用时传递给它的函数的返回值。您每次都从函数返回一个数组,因此每个元素都被替换为一个数组。使用 Array#flatMap 相反,它在映射后展平了数组。

const getCars = (cars, carNames) => {
const result = carNames.flatMap((carName) =>
cars.filter(
(car) =>
car.name === carName
)
);
console.log('result', result);
return result;
};

const cars = [{
name: 'BMW',
type: '2020'
}, {
name: 'Audi',
type: '2019'
}, {
name: 'Benz',
type: '2018'
}]

getCars(cars, ['BMW', 'Benz']);

为了提高效率,您可以使用 Array#filter cars数组,只保留名称包含在 carNames 中的元素大批。

const getCars = (cars, carNames) => {
const result = cars.filter(({name})=>carNames.includes(name));
console.log('result', result);
return result;
};

const cars = [{
name: 'BMW',
type: '2020'
}, {
name: 'Audi',
type: '2019'
}, {
name: 'Benz',
type: '2018'
}]

getCars(cars, ['BMW', 'Benz']);

关于javascript - 过滤数组以获取 ES6 中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62644971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com