【问题标题】:parameter naming in JavaScript filter() methodJavaScript filter() 方法中的参数命名
【发布时间】:2020-06-10 12:27:24
【问题描述】:

好的,这已经困扰我一段时间了,所以任何帮助都将不胜感激!

过滤问题:

取以下数组:

const companies = [{name: "Company One", catagory: "Finance"}, {name: "Company Two", catagory: "Retail"}, {name: "Company Three", catagory:"Auto Shop"}];

当我看到filter() 函数被列为:

const retailCompanies = companies.filter(company => company.catagory === 'Retail');

它让我问为什么 company.catagory 而不是像父数组中的文本所暗示的那样 company.catagory?这可能看起来微不足道,但我只需要知道它在哪里改变以及代码如何读取它。

谢谢!

【问题讨论】:

  • companies - 包含所有公司的数组 company - 数组的一项。由于将对每个成员调用该函数,因此它将遍历所有成员。
  • 我建议你应该改变你的问题的标题,这不是高阶函数。
  • 考虑改这个标题,谢谢

标签: javascript ecmascript-6 filter


【解决方案1】:

company 是保存当前元素的回调参数,你可以随意命名它,大多数情况下你会看到人们将它命名为 el 或者他们像这样解构它:

const retailCompanies = companies.filter(({ catagory }) => catagory === 'Retail');

company 持有循环的当前元素,它看起来像这样:

{name: "Company One", catagory: "Finance"}

并且您想将catagory 属性与'Retail' 进行比较,因此您需要编写

company.catagory === 'Retail'

【讨论】:

    【解决方案2】:

    我不认为它是高阶函数,它是数组的内置方法。

    过滤器语法是:

    let newArray = arr.filter(callback(element[, index, [array]])[, thisArg])
    

    在您的示例中,company 是上述语法中的element。 过滤器将为每个给定数组的元素运行回调函数,直到结束。

    来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

    【讨论】:

      【解决方案3】:

      过滤器函数被传递一个回调,然后通过传递数组中的单个值在循环中调用该回调。

      因此,每次运行回调时,您都会从公司数组中传递一个对象,例如第一次迭代中的{name: "Company One", catagory: "Finance"},第二次迭代中的{name: "Company Two", catagory: "Retail"},依此类推。

      由于您将对象称为company,因此您使用company.category 来访问此对象中的类别字段。您可以选择将回调函数的参数命名为任何名称,例如 item

      const retailCompanies = companies.filter(item => item.catagory === 'Retail');
      

      你可以把过滤功能想象成这样

      Array.prototype.filter = function(callback) {
         const arr = this;
         const res = [];
         for(let i = 0; i < arr.length; i++) {
            if(callback(arr[i], i)) { // call the callback function with the ith item
               res.push(arr[i]);
            }
         }
         return res;
      
      }
      

      【讨论】:

        猜你喜欢
        • 2016-11-30
        • 2012-12-04
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        • 1970-01-01
        • 1970-01-01
        • 2015-02-04
        • 2022-11-01
        相关资源
        最近更新 更多