-1

我有 2 个数组,如下所示:

const array1 = [{name: "1"}, {name: "2"}, {name: "3"}, {name: "4"}, {name: "4"}];
const array2 = [{name: "1"}, {name: "5"}, {name: "3"}, {name: "4"}, {name: "4"}, {name: "4"}, {name: "1"}, {name: "1"}, {name: "2"}];

预期输出为:

[{name: "1"}, {name: "2"}, {name: "3"}, {name: "4"}, {name: "4"}, {name: "5"}, {name: "4"}, {name: "1"}, {name: "1"}];

结果数组应包含数组 1 的所有元素以及数组 2 中尚未出现在数组 1 中的那些元素

我尝试使用_.unionBy

_.unionBy(array1, array2, 'name')

但它只会产生一个带有 uniq 'name' 的数组

我们如何使用 lodash 实现这一点?

4

2 回答 2

0

您可以使用unionBy(lodash)

let result = _.unionBy(array1 , array2, 'name');

unionBy - https://docs-lodash.com/v4/union-by/

于 2021-10-25T07:40:00.267 回答
0

假设您不想{ name: "2" }作为结果集的最后一项,您可以计算分组项并添加想要的项。

const
    array1 = [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }, { name: "4" }],
    array2 = [{ name: "1" }, { name: "5" }, { name: "3" }, { name: "4" }, { name: "4"}, { name: "4" }, { name: "1" }, { name: "1" }, { name: "2" }],
    counts = {},
    result = array1.map(o => (counts[o.name] = (counts[o.name] || 0) + 1, o));

result.push(...array2.filter(o => !counts[o.name] || !counts[o.name]--));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2021-10-25T07:58:11.393 回答