我在这个网站上找到了这个问题的答案,但我只想了解为什么我的解决方案无效。要求实现差异函数的问题,该函数从另一个列表中减去一个列表。
它应该删除列表a中的所有值,这些值存在于列表b中。
我的原始代码:
function array_diff(array,num) {
var results = [];
array.forEach(function(ele, idx, array){
if (num !== ele) {
results.push(ele)
console.log("a is now " + ele)
console.log("b is " + num)
}
})
return results;
}
但每次我把这个参数提供给array_diff([1,2,2],[2]),它返回原始数组,我不知道为什么
答案 0 :(得分:2)
您正在使用num
的数组而不是数字。
array_diff([1, 2, 2], 2)
// ^
function array_diff(array, num) {
var results = [];
array.forEach(function(ele, idx, array){
if (num !== ele) {
results.push(ele);
console.log("a is now " + ele);
console.log("b is " + num);
}
});
return results;
}
console.log(array_diff([1, 2, 2], 2));

如果问题是关于为numbers
使用数组,那么您可以使用Array#indexOf
来检查该元素是否在numbers
数组中。您也可以使用Array#filter
。
function array_diff(array, numbers) {
return array.filter(function(element) {
return numbers.indexOf(element) === -1;
});
}
console.log(array_diff([1, 2, 2], [2]));
console.log(array_diff([1, 2, 2, 3, 4, 5, 6, 6, 6, 7], [1, 3, 5, 7]));

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

答案 1 :(得分:1)
你将它与一个数组(num)进行了比较,因为你的ele是一个整数,所以它总是返回false。
使用此代替
array_diff([1,2,2], 2)
或者如果您想更改功能
function array_diff(array,num) {
var results = [];
array.forEach(function(ele, idx, array){
if (num.indexOf(ele) === -1) {
results.push(ele)
console.log("a is now " + ele)
console.log("b is " + num)
}
})
return results;
}
答案 2 :(得分:-1)
你的比较是错误的,你应该写:
if(num != ele)
而不是
if(num !== ele)