使用.filter搜索数组

时间:2018-11-02 10:18:44

标签: javascript arrays node.js

我正在使用Node.js编写一些客户数据。有一次我正在查看我的代码,然后意识到自己写了这样的东西:

for(var contract of contractData)
{
   var customer = customerData.filter(customer => customer.customerCode === contract.customerCode)[0];
}

因此,我有一些合同和一些客户。我需要遍历合同,并通过将合同中的customerCode与客户的customerCode进行比较,为每个合同找到正确的客户。

出于某种原因,我认为至少使用像这样的过滤器方法看起来是最干净的解决方案,但是我开始怀疑像那样使用它是否是一个好主意,尤其是当我知道结果总是是长度为一的数组,即我最后使用的是[0]。

让我们不要拘泥于其他细节,例如为什么合同和客户没有被他们的customerCode索引,或者为什么我不为此使用数据库。我只对以这种方式使用.filter以及对这样使用它是否有意义感兴趣。如果这不是一个好方法,那么更好的选择是什么?

2 个答案:

答案 0 :(得分:2)

否,当您只想标识满足数组测试要求的 one 元素时,可以使用的适当方法是.find,它将返回该元素(或{ {1}}(如果没有匹配的元素):

undefined

参数和求值与for(var contract of contractData) { var customer = customerData.find(customer => customer.customerCode === contract.customerCode); } 相同,只不过返回一个元素。不过请注意,filter是ES6,因此请包含一个polyfill以支持过时的浏览器。

答案 1 :(得分:-2)

对于浏览器,请记住[].find()的浏览器非常有限,仅支持现代浏览器,而根本不支持。