过滤器es6返回数组而不是对象

Jan*_*lia 6 javascript ecmascript-6 reactjs

我有一堆对象数组,我想使用过滤器获取特定对象,但我使用下面的代码得到了数组.

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

const x = target.filter(o => o.id === 1)
console.log(x)
Run Code Online (Sandbox Code Playgroud)

rai*_*7ow 19

如评论中所述,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}
Run Code Online (Sandbox Code Playgroud)


小智 5

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)
Run Code Online (Sandbox Code Playgroud)


prz*_*_li 0

Array.prototype.filter将返回包含通过测试函数的原始数组中的元素的数组。

如果您确定 id 是唯一的,只需执行 x[0] 即可获得结果。

  • 如果数组很大,那只是浪费时间:“filter”会遍历所有元素,即使结果已经找到。然而,“find”在找到结果后立即停止。 (2认同)