我有一段代码,仅当account
中的usersList
与code
中的users_code
相等时,才将一个字段从一个数组复制到另一个数组字段。运行速度很慢。是否有另一种方法可以使其运行更快?
for (var i = 0; i < this.usersList.length; i++) {
for (var j = 0; j < this.users_code.length; j++) {
if (this.deductionsList[i].account == this.users_code[j].code) {
this.deductionsList[i].name = this.users_code[j].name
}
}
}
谢谢您的时间!
答案 0 :(得分:1)
您可以尝试以下操作:
for (var i = 0; i < this.usersList.length; i++) {
var userCode = this.users_code.find(function(user){
return user.code === this.deductionsList[i].account;
});
this.deductionsList[i].name = userCode.name;
}
我相信,查找功能比在孔阵列中发射信号要快。希望对您有帮助
答案 1 :(得分:1)
创建一个排序索引或直接对域代码上的数组users_code
进行排序。然后,您可以通过二分搜索和线性搜索来枚举具有匹配代码的条目。这需要O(log N + K)
个操作而不是O(N)
。 (N
是users_code
的长度,K
是匹配的数量。)
答案 2 :(得分:0)
1)您可以获得1次长度,而不是每次<
检查(如您的代码一样)
2)您可以遍历users_code
并使用代码键和名称值创建对象:
const codeNames = this.users_code.reduce((result, e) => {
result[e.code] = e.name;
return result;
}, {});
this.usersList.forEach((e, i) => {
this.deductionsList[i].name = codeNames[this.deductionsList[i].account] || this.deductionsList[i].name;
});
所以,兼容性将是〜O(n + m),而不是O(n * m)