【问题标题】:I'm having trouble understanding the "element" parameter in Array.prototype.filter()我无法理解 Array.prototype.filter() 中的“元素”参数
【发布时间】:2021-04-25 01:27:13
【问题描述】:

过去几个月我一直在通过 Codecademy 学习 JavaScript,现在我正在做一个信用卡验证器练习。

我在此步骤中的目标是迭代数组中的所有其他元素,并且我使用了以下代码来执行此操作,效果很好(由 dannymac 在另一篇文章中提供):

let checkDigits = array.filter((element, index) => {
    return index % 2 === 0
    })
  console.log(checkDigits)

问题是,即使我了解正在发生的事情,我也不知道“element”参数的使用位置。我已经检查了文档,但是由于我对此很陌生,所以我仍然无法真正看到它。

我知道这可能看起来像一个愚蠢的问题,但如果有人能简单地向我解释一下,我将不胜感激。

非常感谢。

亲切的问候, 维克。

【问题讨论】:

标签: javascript arrays filter parameters


【解决方案1】:

在这种情况下,它没有被使用——它只是一个未使用的参数。

不依赖内置函数很容易构建这种情况:只需定义一个接受 2 个参数并且只使用第二个参数的函数:

const fn = (arg1, arg2) => {
  console.log('arg2 is', arg2);
};

fn('abc', 'def');

对于.filter,其函数签名始终相同:传递给回调的第一个参数是被迭代的元素,传递给回调的第二个参数是迭代索引。并非所有参数都必须在函数中引用;一个函数甚至可以定义一些参数,然后使用其中的 none (虽然那会很奇怪)。在这里,由于您只能通过为第一个参数指定名称来获得对第二个参数的引用,因此element 必须列在参数列表中。

未使用参数的一个常见约定是给它一个下划线的名称,例如:

let checkDigits = array.filter((_, index) => {

这将与您当前的代码一样有效,但(对某些人来说)可能看起来不那么混乱。

【讨论】:

    【解决方案2】:

    您没有在您的案例中使用元素...您实现的过滤器将根据它们在数组中的位置选择偶数元素。

    这是一个使用元素的例子:

    const array = [4,12,15,9]
    let checkDigits = array.filter((element, index) => {
        return element > 9
        })
      console.log(checkDigits)
    
    /*
    [12,15]
    */
    
    

    【讨论】:

      【解决方案3】:

      如果你有一个像[1, 3, 4, 5, 6, 2, 4] 这样的数组 并且您在其上运行filter,它将遍历数组中的每个element 并执行您提供的回调函数。该回调函数有几个参数,第一个参数是 134 的元素,第二个参数是从零开始并增加数组长度的索引 -1。在您的代码示例中使用的回调函数中,未使用该元素,因为它只关心每个项目的索引,但由于参数仍然以相同的顺序出现,您必须将元素添加为第一个参数。

      这里有一些例子

      const arr = [1, 5, 6, 87, 2, 4, 7, 4, 6, 5]
      
      // get all the items that are divisible by 2
      const filteredArr = arr.filter((element) => element % 2 == 0)
      
      console.log(filteredArr)

      const arr = [1, 5, 6, 87, 2, 4, 7, 4, 6, 5, 578, 23, 12, 1325, 78]
      
      // get all the items that are at an even index in the array and are greater than 10
      const filteredArr = arr.filter((element, index) => index % 2 == 0 && element > 10)
      
      console.log(filteredArr)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-15
        • 2023-03-25
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2021-10-11
        相关资源
        最近更新 更多