将数组对象相同的key合并,主要判断合并其中字段的true和false

请问怎么将对象相同的key合并,但是还要判断isIn字段存在true就为true,否则就为false

[
    {
        "favoriteId": 1,
        "favoriteName": "31的收藏夹",
        "isIn": true
    },
    {
        "favoriteId": 1,
        "favoriteName": "31的收藏夹",
        "isIn": false
    },
    {
        "favoriteId": 2,
        "favoriteName": "31的收藏夹2",
        "isIn": false
    },
    {
        "favoriteId": 2,
        "favoriteName": "31的收藏夹2",
        "isIn": true
    },
    {
        "favoriteId": 5,
        "favoriteName": "31的收藏夹3",
        "isIn": false
    }
]

变为下面这样

[
    {
        "favoriteId": 1,
        "favoriteName": "31的收藏夹",
        "isIn": true
    },
    {
        "favoriteId": 2,
        "favoriteName": "31的收藏夹2",
        "isIn": true
    },
    {
        "favoriteId": 5,
        "favoriteName": "31的收藏夹3",
        "isIn": false
    }
]
阅读 2.3k
2 个回答

徒手写的,大概这样:

image.png

arr.reduce((accumulator, current) => {
    var val = accumulator.find(e => e.favoriteId === current.favoriteId);
    if (!!val) {
        if (current.isIn) {
            val.isIn = true;
        }
        return accumulator;
    }

    return accumulator.concat(current);
}, []);

lodash啊,神器在手,天下我有,一行代码搞定:

_.uniqBy(array.filter(item => item.isIn), 'favoriteId')
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题