javascript使用reduce删除

时间:2018-06-23 10:29:50

标签: javascript

我正在尝试仅在状态为'xyz'的obj中获取特定值

user.friends =
CoreMongooseArray [
{ _id: 5b11824350c0011afe9ca310,
user:
 { profile: [Object],
   _id: 5b11805a50c0011afe9ca2fe,
   username: 'user1' },
status: 'abc' },
{ _id: 5b191033d240ab4a10ffb54f,
user:
 { profile: [Object],
   _id: 5b0ec81f958f5b4919b83c40,
   username: 'user2' },
status: 'xyz' } ]

我正在使用

user.friends.reduce((a, t) => a + (t.type === 'xyz' ? 0 : 1), 0);

但是它只返回1,而不仅仅是返回用户名为user2的对象,为什么?

1 个答案:

答案 0 :(得分:5)

  

但是它只返回1,而不仅仅是返回用户名为user2的对象,为什么?

因为这是回调的最后一个返回值。 reduce就是这样的。

如果要在数组中找到一个符合条件的特定对象,reduce不是要使用的工具(尽管您可以强迫它工作,就像可以使用螺丝起子作为锤子一样)您会尽力而为)。使用的工具是find

const oneXYZFriend = user.friends.find(e => e.status === 'xyz');

(注意,由于您的对象具有e.type === 'xyz'属性,而不是e.status === 'xyz'属性,因此我将测试从status更改为type。)

如果要在符合条件的数组中查找多个对象,请使用filter

const xyzFriends = user.friends.filter(e => e.status === 'xyz');