javascript - js 数组匹配对象并赋值
ringa_lee
ringa_lee 2017-04-11 12:51:19
0
2
339

如何找到俩个数组中的匹配项并且赋值。如:
var arr1=[{"id":1},{"id":2}{"id":3}....];
var arr2=[{"id":1,"value":"a"},{"id"2,"value":"b"}...];

目前想到的方法就是循环里套循环来匹配:

for(i=0;i

有没有什么更加简便高效的方法?

ringa_lee
ringa_lee

ringa_lee

reply all (2)
刘奇

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; } }
      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!