我有两个对象,它们是数组。我想比较它们并找到唯一的值,然后将它们分配到另一个数组中。这是我的代码
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。
答案 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]
}
我确定您的代码已针对该问题进行了修改,但是在此处同时使用res
和arrayVal
毫无意义。您可以像这样重构代码:
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]
}