84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
如何找到俩个数组中的匹配项并且赋值。如:var arr1=[{"id":1},{"id":2}{"id":3}....];var arr2=[{"id":1,"value":"a"},{"id"2,"value":"b"}...];
目前想到的方法就是循环里套循环来匹配:
for(i=0;i
有没有什么更加简便高效的方法?
ringa_lee
WeiJietao的答案是不是默认了两个数组长度一致,且顺序一致?这个题目没有这么说明吧, 贴下自己写的如下。优化了下语义,代码量。要扩展的话加几个参数就ok。
var arr1=[{"id" : 33}, {"id" : 42}, {"id" : 21}, {"id" : 2}, {"id" : 777}]; var arr2=[{"id" : 3, "value" : "a"}, {"id" : 2, "value" : "b"}, {"id" : 42, "value" : "c"}]; function replace(arr1, arr2) { var temp; arr1.map(function(v1) { (temp = arr2.find(function(v2) { return v1.id == v2.id; })) && (v1.newValue = temp.value) return v1; }) return arr1; } console.log(replace(arr1, arr2)); // or replace(arr1, arr2) console.log(arr1);
另外你说的10万条问题,个人感觉没有必要,因为前提不成立,没有场景会让前端一次取这么多数据,你应该考虑优化数据库。
减掉一次循环:
for(var i = 0, j = 0, l = arr1.length; i < l; i++) { var temID = arr1[j]['id']; if (temID == arr2[i]['id'] && j < l) { arr1[j]['newValue'] = arr2[i]['value']; j++; i = 0; break; } }
WeiJietao的答案是不是默认了两个数组长度一致,且顺序一致?这个题目没有这么说明吧, 贴下自己写的如下。优化了下语义,代码量。要扩展的话加几个参数就ok。
另外你说的10万条问题,个人感觉没有必要,因为前提不成立,没有场景会让前端一次取这么多数据,你应该考虑优化数据库。
减掉一次循环: