我有一堆对象数组,我想使用过滤器获取特定对象,但是我使用以下代码获取了数组。
const target = [{
name: 'abc',
id: 1
}, {
name: 'def',
id: 2
}]
const x = target.filter(o => o.id === 1)
console.log(x)
我有一堆对象数组,我想使用过滤器获取特定对象,但是我使用以下代码获取了数组。
const target = [{
name: 'abc',
id: 1
}, {
name: 'def',
id: 2
}]
const x = target.filter(o => o.id === 1)
console.log(x)
正如评论中所说,filter
不允许您从数组中获取特定对象 - 它只返回另一个元素满足给定谓词的数组。你真正需要的是Array.prototype.find()。引用文档:
该
find()
方法返回数组中满足提供的测试函数的第一个元素的值。否则undefined
返回。
所以你的代码看起来像这样:
const target = [{
name: 'abc',
id: 1
}, {
name: 'def',
id: 2
}];
const x = target.find(o => o.id === 1);
console.log(x); // {name: "abc", id: 1}
array.filter 总是返回数组。但是你可以试试这个——
const target = [{
name: 'abc',
id: 1
}, {
name: 'def',
id: 2
}]
let obj = {}
const x = target.filter( (o, index) => {
if(o.id === 1)
obj = target[index]
})
console.log(obj)
Array.prototype.filter
将返回包含来自通过测试函数的原始数组元素的数组。
如果您确定 id 是唯一的,只需执行 x[0] 即可获得结果。
filter() 方法创建一个新数组,其中包含通过提供的函数实现的测试的所有元素。
find() 方法返回提供的数组中满足提供的测试函数的第一个元素的值。如果没有值满足测试函数,则返回 undefined。