array.filter在使用时未指定参数但在函数中定义

时间:2016-12-18 02:47:24

标签: javascript arrays

我想知道是否有人可以向我解释为什么更具体地说明为什么我不需要在notes.filter(notesCheck)中说明obj需要什么。该功能以这种方式正常工作。

var duplicateNotes = notes.filter(notesCheck)

function notesCheck(obj) {
    if (obj.title === note.title) {
        console.log("duplicate found")
        return true
    }
}

我读过https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter,但并没有真正从中得到解释。

摘要 filter()为数组中的每个元素调用一次提供的回调函数,并构造一个包含所有值的新数组,其中回调返回一个强制为true的值。仅为已分配值的数组的索引调用回调;对于已删除的索引或从未分配过值的索引,不会调用它。不会通过回调测试的数组元素被简单地跳过,并且不包含在新数组中。

使用三个参数调用回调:

元素的值 元素的索引 正在遍历的Array对象

1 个答案:

答案 0 :(得分:2)

Array.filter将函数作为输入,并将为数组中的每个元素调用它。它的工作方式如下:

var myFilter(array, test) {
  var result = [];
  array.forEach(function(obj) {
    if (test(obj)) { result.push(obj); }
  }
  return result;
}

// notes.filter(notesCheck) it the same as myFilter(notes, notesCheck)

因此,您在调用过滤器时不需要指定obj,而只需要处理它们的逻辑。

基本上,Array.filter(test)表示give me all the elements that pass the test,在英语中我可以说不知道这些元素是什么,我也是javascript。