javascript - 如何删除引用数组的额外出现

标签 javascript

假设我们有两个这样的数组:

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/

相关文章:

javascript - 同位素项目正在跳跃

javascript - JQGrid - 日期过滤器不适用于日期格式(日期(1453636335000))

javascript - 在 Canvas 中翻转 Sprite

javascript - 获取div高度的最快方法

javascript - CSS 菜单使链接居中

javascript - 如何从 Javascript 字符串中删除一段文本?

javascript - 单击不会在 tbody 的第一行触发

javascript - 使用无效数据调用 DocumentReference.set()。不支持的字段值 : undefined (found in field uid)

javascript - 使用 .text() 抓取父文本

javascript - 在 Facebook 页面选项卡上获取用户位置