ES6 过滤器 - 如何返回对象而不是数组?

IT技术 javascript reactjs ecmascript-6
2021-05-22 21:31:14

我有一堆对象数组,我想使用过滤器获取特定对象,但是我使用以下代码获取了数组。

const target = [{
  name: 'abc',
  id: 1
}, {
  name: 'def',
  id: 2
}]

const x = target.filter(o => o.id === 1)
console.log(x)

4个回答

正如评论中所说,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。