如何高效遍历数组的问题

发布于 2022-09-13 01:08:39 字数 277 浏览 23 评论 0

两个长度为500的数组,数组的每一项都是一个对象:

//数组1
[
  {
    id: 123,
    ...
  }
  ...
]
//数组2
[
  {
    itemId: 123,
    value: 1,
    ...
  }
  ...
]

数组1每一项的id和数组2某一项的itemId相等,数组1的项中没有value,需要把数组2每一项的value赋给数组1中id与itemId相等的项。请问怎么遍历最快?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

故事灯 2022-09-20 01:08:39

itemId 是唯一的吗?

如果是可以考虑先把数组二变为以 itemId 为 Key 的字典结构,然后遍历数组一时直接从这个字典里取值就可以了。

// 伪代码,看大致思路
let temp = {};
arr2.forEach(k => { temp[k.itemId] = k.value; });
arr1.forEach(e => { e.value = temp[e.id]; });

这样做时间复杂度是 O(n) (实际是 T(2n+1),但去掉常数项就是 O(n))。

应该没有可以做到 O(1) 的算法……吧……

握住你手 2022-09-20 01:08:39

两次循环

const setArrayTo=(arr1, arr2)=>{
 let arr2Map = arr2.reduce((acc,cur)=>(acc[cur.id]=cur,acc),{});
 arr1.forEach(item=>item.value||=arr2Map[item.itemId].value);
 }
let arr1 = [{id:123,value:''},{id:265,value:4654}];
let arr2 = [{itemId:123,value:123},{itemId:265,value:4654}]

setArrayTo(arr1, arr2);
console.log(arr1,arr2);

image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文