【问题标题】:Check if object of any array exist in an another array, if not exists then push onto another array , or else remove it from another array检查任何数组的对象是否存在于另一个数组中,如果不存在则推入另一个数组,否则将其从另一个数组中删除
【发布时间】:2021-12-29 16:29:44
【问题描述】:

我正在开发一个复选框 ui react web 应用程序,在其中,选中时我们调度包含对象的项目数组,取消选中我们还会调度包含对象的项目数组。所以我需要添加这个逻辑 - 检查任何数组的对象是否存在于另一个数组中,如果不存在则推送到另一个数组,否则将其从另一个数组中删除

let items1 = [{ name: "a" }, { name: "b" }, { name: "c" }];
let items2 = [{ name: "a" }, { name: "d" }, { name: "e" }];

const commonItems = items1.filter((x) => items2.some((y) => y.name === x.name));

if (!commonItems) {
    items1.push(...items2);
} else {
    items1 = items1.filter((x) => items2.some((y) => y.name !== x.name));
}

console.log(items1);
console.log(items2);

检查任何数组的对象是否存在于另一个数组中,如果不存在则推入另一个数组,否则将其从另一个数组中删除, 这段代码是否符合上述逻辑?

【问题讨论】:

  • 我将其编辑为交互式 sn-p,在运行后记录 items1items2。请注意,我将const 更改为let,因为您的脚本正在更新items1,而您不能使用const 来执行此操作。

标签: javascript arrays reactjs ecmascript-6


【解决方案1】:

几个问题。 1) commonItems 始终为真值,因为 filter 在没有结果时返回空数组,所以总是转到 else 块 2) Else 块过滤器不正确。 (此处更新为使用 !some)

let items1 = [{ name: "a" }, { name: "b" }, { name: "c" }];
let items2 = [{ name: "a" }, { name: "d" }, { name: "e" }];

const commonItems = items1.filter((x) => items2.some((y) => y.name === x.name));

console.log(commonItems)
if (commonItems.length < 1) {
    items1.push(...items2);
} else {
    items1 = items1.filter((x) => !items2.some((y) => y.name === x.name));
}

console.log(items1);
console.log(items2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多