У меня есть два объекта, которые являются массивами. Я хочу сравнить их, найти уникальные значения и присвоить их другому массиву. вот мой код
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.info(arrayVal);
}
ожидаемый результат 4,5. Но мой выход 2,3,4,5.
Вот какой-то старомодный код, который должен работать:
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]);
}
В вашем коде есть синтаксическая ошибка.
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.info(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.info(input1SubtractInput2); // [4, 5]
}