假设我们有两个这样的数组:
let s1 = ["A", "B", "C", "D", "B"] // Note: "B" has been occurred 2 times
let s2 = ["A", "B", "C", "D", "B", "A", "X", "Y"] // // Note: "B" has been occurred 2 times just like s1 but we have another occurrence for "A"
我想基于这两个数组创建一个新数组 (let s3
),我们将删除出现次数多于同一元素在数组中出现次数的元素 s1
所以 s3 数组
应该是这样的:
let s3 = ["A", "B", "C", "D", "B", "X", "Y"] // we just removed "A" cause it occurred more than "A" occurances in s1
请注意,我们需要任何其他内容 ("X", "Y"
)。我们只想处理额外的事件。
到目前为止,我可以找到像这样重复出现的索引,但我找不到一种方法来比较每次出现以查看它是否是额外的(复杂的):
let s1 = ["A", "B", "C", "D", "B"]
let s2 = ["A", "B", "C", "D", "B", "A", "X", "Y"]
var s3 = [];
for (let i = 0; i < s2.length; i++) {
for (let j = 0; j < s1.length; j++) {
if (s2[i] === s1[j]) {
s3.push(i);
break;
}
}
}
console.log(s3)
我的英文很差,不知道能不能解释清楚!
注意:我可以简单地使用 s3 = [...new Set(s2)]
来删除重复的元素,但我想要其他东西。
最佳答案
由于您希望将所有内容保留在 s1
中,但只添加 s2
中尚未存在的项目,因此您可以先设置 s3
> 到 s1
。然后遍历 s2
,如果 s1
没有 的值,则将其插入 s3
。
const s1 = ["A", "B", "C", "D", "B"];
const s2 = ["A", "B", "C", "D", "B", "A", "X", "Y"];
const s3 = [...s1];
s2.forEach(d => {
if (!s1.includes(d)) s3.push(d);
});
console.log(s3);
关于javascript - 如何删除引用数组的额外出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362842/