我正在尝试仅在状态为'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的对象,为什么?
答案 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');