【问题标题】:Look through every items in array(A) and check if it allready exsists in another array(B)查看数组(A)中的每个项目并检查它是否已经存在于另一个数组(B)中
【发布时间】:2017-08-25 09:10:50
【问题描述】:

我有两个数组(数组 A 和数组 B)。我想检查arrayA中的任何项目是否已经存在于arrayB中。如果不是我想将它添加到arrayB(但这不是问题)。在示例中,我只想 console.log 将项目添加到数组 B。

首先我认为这是个好主意:

 for(var i = 0; i < arrayA.length; i++){
        for (var j = 0; j < arrayB.length; j++) {
            if(body[i].id == res[j].name){
                console.log("The article allready exsists")
            }
            else{
                console.log("Adding item to arrayB")
            }


      }

      }

然后我意识到这不是一个很好的方法,因为数组非常大。此外,else 语句将运行的次数等于 arrayA 的长度。这也是一个问题,因为第一次运行时,arrayB 的数组长度将为零,甚至不会到达 else 语句。

他们还有其他方法可以实现我在这里尝试做的事情吗?

【问题讨论】:

  • 您可以将缺失值存储(推送)到另一个数组(C)中,然后在 for 循环完成后将其连接到数组 B
  • 所以如果我理解正确的话,你想在ArrayB 中推送独特的项目。对吗?
  • 是的,没错!
  • 你检查过这个链接吗:stackoverflow.com/questions/11246758/…
  • @Alexandru-IonutMihai 不是我的投票。我投反对票时发表评论

标签: javascript arrays loops for-loop


【解决方案1】:

您可以使用哈希表和线性方法,首先迭代 arrayB 并收集 name 属性,然后遍历 arrayA 并检查 id 是否在带有哈希表的 arrayB 中。如果不存在,请将信息添加到arrayB

var arrayA = [{ id: 1 }, { id: 3 }, { id: 4 }, { id: 6 }, { id: 7 }, { id: 9 }, { id: 12 }, { id: 35 }, { id: 22 }, { id: 11 }, { id: 34 }, { id: 90 }, { id: 2 }],
    arrayB = [{ name: 1 }, { name: 7 }, { name: 8 }, { name: 19 }, { name: 25 }, { name: 41 }, { name: 35 }, ],
    hashB = Object.create(null);

arrayB.forEach(function (b) {
    hashB[b.name] = true;
});

arrayA.forEach(function (a) {
    if (!hashB[a.id]) {
        arrayB.push({ name: a.id });
        hashB[a.id] = true;
    }
});

console.log(arrayB);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 有点超过我的水平,不熟悉哈希表,但肯定会研究它!
【解决方案2】:

这可能会有所帮助。你不需要嵌套循环来实现这一点。

 var arrayA = [1,2,3,4,5,6];
 var arrayB = [2,4,7,8];
 for(var i = 0; i < arrayA.length; i++){
       if(arrayB.indexOf(arrayA[i]) > -1){
            console.log("The article allready exsists");
         }
         else{
             console.log("Adding item to arrayB")
         }
   }

【讨论】:

  • 不使用 indexOf 计数作为嵌套循环吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多