Javascript filter()函数不起作用

时间:2017-12-18 17:57:00

标签: javascript arrays

我有一个小功能,它应该抓取数组的元素" arr "然后创建一个新数组" arrNew "在变量 func == true 的条件下,其中只包含第一个数组的元素。

函数赋值是显示数组 arr 中包含条件 arr [i]%2 == 0。

的元素。

现在功能工作不是很好,因为 - console.log(arr)和下一个结果是一样的;

(7) [1, 2, 3, 4, 5, 6, 7] and (7) [1, 2, 3, 4, 5, 6, 7] 

function filter(arr, func) {
  var arrNew = [];

  for (var i = 0; i < arr.length; i++) {
    if (func = true) {
        arrNew[i] = arr[i];
    }
  }

  return arrNew;
}

var arr = [1, 2, 3, 4, 5, 6, 7];

console.log(arr);
console.log(filter(arr, function(a) {
  return a % 2 == 0;
})); // 2,4,6

------------------------------------- UPDATE --------- -------------------------------

我在if (func = true)上更改了if (func(arr[i]) == true),现在功能正常。

但是我有一个额外的问题,当我在第一个文件中添加了一个额外的功能。 第一个是正常工作,但第二个是错误&#34; func不是函数&#34;在字符串中的第一个&#34; if(func(arr [i])== true)&#34;。我不明白为什么......

所以,第一个函数的替换很好。但第二个 - 错误:( ...

function filter(arr, func) {
  var arrNew = [];

  for (var i = 0; i < arr.length; i++) {
    if (func(arr[i]) == true) {
      arrNew.push(arr[i]);
    }
  }

  return arrNew;
}

function inBetween(a, b) {
  var arrayBtw = [];

  for (var i = 0; i < arr.length; i++) {
    if (arr[i] >= a && arr[i] <= b) {
      arrayBtw.push(arr[i]);
    }
  }

  return arrayBtw;
}

var arr = [1, 2, 3, 4, 5, 6, 7];

console.log(filter(arr, function(a) {
  return a % 2 == 0;
})); // 2,4,6

console.log( filter(arr, inBetween(3, 6)) ); // 3,4,5,6

4 个答案:

答案 0 :(得分:4)

你做错了。您已经使用了一个赋值运算符,您应该使用比较运算符。此外,您还需要使用arr.push()将新元素附加到数组中。

您的代码需要更改为:

if (func(arr[i]) === true) {
    arrNew.push(arr[i]);
}

由于其他人已经指出了这一点,我将添加更多内容。要获得相同的结果,您可以使用内置的Javascript filter函数。

var arr = [1, 2, 3, 4, 5, 6, 7];

var arrNew = arr.filter(function(a){
            return a % 2 == 0;
        });

console.log(arrNew);

或者以更简洁和紧凑的方式做同样的事情,你可以使用arrow function

var arrNew = arr.filter(a => a % 2 == 0);

这一个班轮将产生相同的结果;)希望它有所帮助。

===回答更新的问题===

您收到func is not a function的错误,因为在以下行中,您将inBetween(3, 6)作为第二个参数传递给filter函数。

console.log(filter(arr, inBetween(3, 6)));

但是,您的filter函数期望function类型作为第二个参数,而您的inBetween函数返回array(而不是“function “对象”。您需要从function;)

返回inBetween

如果没有,并且你试图获得在3和6之间可以被2整除的数字,那么你已经以错误的顺序传递了值:)改变顺序就可以了。

console.log(filter(inBetween(3, 6), function (a) {
    return a % 2 == 0;
})); //4,6

如果您只想将数字设置在3到6之间(没有任何过滤,请参考您评论的预期输出),那么您不需要外部过滤方法调用。只需删除它。

console.log(inBetween(3, 6)); // 3,4,5,6

希望有所帮助:)

答案 1 :(得分:3)

代码有一些错误,首先不是

func = truefunc(arr[i]) === true

而不是arrNew[i] = arr[i];,你应该arrNew.push(arr[i]);

您需要调用该函数,并且您将该函数指定为不比较

答案 2 :(得分:2)

而不是

if (func = true)

if (func(arr[i]) == true)

而不是

arrNew[i] = arr[i];

arrNew.push(arr[i]);

另请注意,JavaScript已具有数组过滤功能,有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

答案 3 :(得分:1)

if (func = true) {

^这是一项任务。您将值true分配给变量func。您想要调用该函数,因此func(arr[i])而不是func