gpt4 book ai didi

javascript - 追加数组项或排除(如果已存在)

转载 作者:行者123 更新时间:2023-11-28 14:36:44 27 4
gpt4 key购买 nike

正如我在标题中描述的问题一样,我需要实现以下算法:

我得到了一些元素数组,例如:

let arr1 = [
{id:1, foo1: '...', foo2: '...'},
{id:2, foo1: '...', foo2: '...'},
{id:3, foo1: '...', foo2: '...'},
];

在我的应用程序的某个地方,我得到了另一个数组 arr2,它可以包含 arr1 中已经存在的元素。

let arr2 = [
{id:1, foo1: '...', foo2: '...'},
{id:4, foo1: '...', foo2: '...'},
{id:5, foo1: '...', foo2: '...'},
];

如果 arr1 包含 arr2 的每个元素,我需要从 arr1 中排除这些元素。在第二种情况下,arr2 至少包含一个不在 arr1 中的元素,arr2 的所有元素都将追加到 arr1。

我尝试了lodash的函数_.xorBy(arr1, arr2, 'id'),但它并不在所有情况下都有效。我在 lodash 的文档中寻找了一些满足我需要的其他功能,但我没有找到任何东西。

这是我的预期行为(我只使用数字,但在实际应用程序中存在具有此 id 的对象):

  • 给定:arr1=[1,2,3,4,5] 和 arr2=[1,2,3] => resultArr=[4,5]
  • 给出: arr1=[1,2,3,4,5] 和 arr2=[1,2,6] => resultArr=[1,2,3,4,5,6]//6 不同,所以追加所有

你能帮我解决我的问题,或者告诉我一些优雅的方法吗?谢谢建议。

最佳答案

如果_.difference() arr2arr1 之间的数组长度大于 0,返回 _.union()的数组。如果没有返回arr1arr2之间的_.difference()

注1: _.difference(arr2, arr1) 不等于 _.difference(arr1, arr2) 因为顺序结果值的引用由第一个数组确定。

注释 2: 该示例使用基元数组。对于对象数组,请使用 By 版本 - _.differenceBy()_.unionBy()使用属性 iteratee 简写 - _.differenceBy(arr1, arr2, 'id')

const incEx = (arr1, arr2) => 
_.difference(arr2, arr1).length > 0 ?
_.union(arr1, arr2)
:
_.difference(arr1, arr2);

console.log(incEx([1,2,3,4,5], [1,2,3]));
console.log(incEx([1,2,3,4,5], [1,2,6]));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

关于javascript - 追加数组项或排除(如果已存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com