比较两个数组对象并找到唯一值

时间:2019-04-10 01:58:03

标签: javascript arrays

我有两个对象,它们是数组。我想比较它们并找到唯一的值,然后将它们分配到另一个数组中。这是我的代码

function()
{
var input1 = [2,3,4,5];
var input2 = [2,3];
var arrayVal = [];
var res = input1.filter(function (n)
{
return input2.indexOf(n) == -1
}):
arrayVal.push(res);
console.log(arrayVal);
}

预期结果是4,5。但是我的输出是2,3,4,5。

2 个答案:

答案 0 :(得分:1)

这是一些应该起作用的老式代码:

for (var i = 0; i < input1.length; i++){
   var found=false;
    for (var j = 0; j < input2.length; j++){
        if (input1[i]==input2[j]){
          found=true;
          break;
        }
   }
  if (!found)
    arrVal.push(input1[i]);    
}

答案 1 :(得分:1)

您的代码中存在语法错误。

return input2.indexOf(n) == -1
}): // <-- should be a semicolon

您的代码看起来大部分都很好。自您调用[[4, 5]]以来,输出实际上是arrayVal.push(res);。那条线将一个数组推入另一个数组,从而导致嵌套数组。您可以使用传播语法并避免嵌套:arrayVal.push(...res);。之后,输出为[4, 5]

完整代码为:

function()
{
  var input1 = [2,3,4,5];
  var input2 = [2,3];
  var arrayVal = [];
  var res = input1.filter(function (n)
  {
    return input2.indexOf(n) == -1
  });
  arrayVal.push(...res);
  console.log(arrayVal); // [4, 5]
}

我确定您的代码已针对该问题进行了修改,但是在此处同时使用resarrayVal毫无意义。您可以像这样重构代码:

function() {
  var input1 = [2,3,4,5],
    input2 = [2,3];
  var input1SubtractInput2 = input1.filter(function(n) {
    return input2.indexOf(n) === -1
  });
  console.log(input1SubtractInput2); // [4, 5]
}