我正在使用Node.js编写有关某些客户数据的信息。有一次,我正在审查我的代码,我意识到我写了这样的东西:
for(var contract of contractData)
{
var customer = customerData.filter(customer => customer.customerCode === contract.customerCode)[0];
}
所以我有一些合同和一些客户的数组。我需要循环合同,通过将合同中的customerCode
与客户的customerCode
进行比较,找到每个合同的正确客户。
我出于某种原因认为使用像这样的过滤方法至少看起来是最干净的解决方案,但我开始想知道是否使用它是一个好主意,特别是当我知道结果总是一个长度为一,我最后使用的是[0]。
让我们不要依赖其他细节,例如为什么合同和客户没有被他们的客户代码编入索引,或者为什么我没有使用数据库。我只对这种方式使用.filter
感兴趣,如果有意义的话,就像这样使用它。如果这不是一个好方法,那么更好的选择是什么呢?
不,当您只想识别在数组中完成测试的一个元素时,使用的适当方法是.find
,它将返回一个元素(如果没有匹配元素,则返回undefined
):
for(var contract of contractData) {
var customer = customerData.find(customer => customer.customerCode === contract.customerCode);
}
参数和评估与filter
相同,只是返回一个元素。但请注意,.find
是ES6,因此包含一个polyfill来支持过时的浏览器。
对于浏览器请记住[].find()
有非常有限的浏览器支持只有现代浏览器没有即可。