显示单独数组中两个数组的相同元素

Showing identical elements of two arrays in a separate array

本文关键字:数组 两个 元素 单独 显示      更新时间:2023-09-26

我对JavaScript很陌生。我在这里要实现的是将两个数组的所有相同元素放入另一个数组中。然后,我删除了原始两个数组中的这些元素。

但是,单独的数组不会显示所有相同的数组。此外,这两个数组仍然显示一些相同的元素。不知道我哪里出错了。

以下代码可能存在语法错误。我不得不修改它以使其更容易提问。

var finalSelective = ["CS348", "CS353", "CS381", "CS422", "CS448", "CS490-ES0", "CS490-DSO"];
var finalSEelective = ["CS348", "CS352", "CS353", "CS354", "CS381", "CS422", "CS448", "CS456", "CS473", "CS490-DSO", "CS490-ES0"];
var SEelecSelec = []; //fulfills SE elective and S elective.
for (var i = 0; i < finalSelective.length; i++) { //There is something wrong with this one.
  for (var j = 0; j < finalSEelective.length;j++){ //It does not show the correct repeats.
    if (finalSelective[i] == finalSEelective[j]) {
      SEelecSelec.push(finalSEelective[j]);
      var x = finalSelective.indexOf(finalSelective[i]);
      if (x != -1) {
        finalSelective.splice(x,1);
      }
      x = finalSEelective.indexOf(finalSEelective[j]);
      if (x != -1) {
        finalSEelective.splice(x,1);
      }
    }
  }
}

这是另一个潜在的解决方案:

带有日志记录的 JsBin

var a = ["CS348", "CS353", "CS381", "CS422", "CS448", "CS490-ES0", "CS490-DSO"];
var b = ["CS348", "CS352", "CS353", "CS354", "CS381", "CS422", "CS448", "CS456", "CS473", "CS490-DSO", "CS490-ES0"];
var c = a.concat(b).filter(function(el) {
  return a.indexOf(el) > -1 && b.indexOf(el) > -1;
});

编辑:根据您在下面的评论,获得实际所需输出的代码是:

for (var i = 0; i < a.length; i++) {
  var indexInB = b.indexOf(a[i]);
  if (indexInB > -1){
    output.push(a[i]);
    a.splice(i, 1);
    b.splice(indexInB, 1);
    i--;
  }
}

仅使用上述代码的 JsBin

这是另一种可能的解决方案。公共值被推送到一个单独的数组中,并且也会从其初始数组中删除。

var finalSelective = ["CS348", "CS353", "CS381", "CS422", "CS448", "CS490-ES0", "CS490-DSO"],
finalSEelective = ["CS348", "CS352", "CS353", "CS354", "CS381", "CS422", "CS448", "CS456", "CS473", "CS490-DSO", "CS490-ES0"],
SEelecSelec = [],
el, index;
for (var i = 0, len = finalSelective.length; i < len; i++) {
    el = finalSelective[i];
    index = finalSEelective.indexOf(el);
    if (index > -1) {
        SEelecSelec.push(el);
        finalSEelective.splice(index, 1);
        finalSelective.splice(i, 1);
    }
}
console.log(finalSelective, finalSEelective, SEelecSelec);

普伦克在这里