我的if条件出了什么问题

时间:2017-01-08 22:23:04

标签: javascript arrays function

我在这个网站上找到了这个问题的答案,但我只想了解为什么我的解决方案无效。要求实现差异函数的问题,该函数从另一个列表中减去一个列表。

它应该删除列表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]),它返回原始数组,我不知道为什么

3 个答案:

答案 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)