繁体   English   中英

Lodash 合并两个有条件的数组

[英]Lodash merge two arrays with conditions

我有 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 实现这一目标?

您可以使用unionBy (lodash)

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

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

假设您不希望{ 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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM