[英]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.