为什么是 company.catagory 而不是 companies.catagory?

问题描述 投票:-2回答:3

好吧,这个问题一直困扰着我,所以任何帮助都将是非常感激的。

过滤问题。

以下面的数组为例。

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,而不是父数组中的文字所显示的那样?这可能看起来很琐碎,但我只需要知道这改变了哪里,以及代码是如何读取的。

谢谢你

javascript ecmascript-6 filter
3个回答
0
投票

company 是保存当前元素的回调参数,你可以给它起任何名字,大多数情况下,你会看到人们把它命名为只是 el 或者他们像这样销毁它。

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

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

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

而你要比较的是 catagory 财产 'Retail' 所以你需要写

company.catagory === 'Retail'


0
投票

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

过滤器的语法是。

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

在你的例子中 companyelement 在上面的语法中,过滤器将对给定数组中的每个元素运行回调函数,直到结束。

来源:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobalhttps:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsArrayfilter。


0
投票

Filter函数被传递给一个回调,然后在循环中通过传递数组中的单个值进行调用。

所以每次回调函数运行时,你都会从你的公司数组中传递一个对象,例如 {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;

}
© www.soinside.com 2019 - 2024. All rights reserved.