如何高效匹配数组中的值

问题描述 投票:0回答:1

我有两个数组a和b。 a 是我想要添加信息的数组,该信息包含在 b 中。 a 和 b 都有一个 keyNum,我将使用它来将 b 中所需的信息与 a 中的相关记录进行匹配。

a 的格式如下:

a = [
  {
    keyNum: 'ABC00001234',
    Date: '20240325 00:00:00.000',
    Cost: '57.95',
    _ItemId: 'c38637b7-f901-4d39-9e29-91910109ffa5'
  },
  {
    keyNum: 'ABC00001234',
    Date: '20240325 00:00:00.000',
    Cost: '102.56',
    _ItemId: '504f2b09-429e-443d-993f-4371eedaee76'
  }
]

元素按“keyNum”排序(降序排列)。

b 的格式如下:

b = [
  {
    keyNum: 'ABC0001234',
    infoNeededIna: 'x13',
    _ItemId: '51c1666b-96bc-4b75-b001-ef698be8193c'
  },
  {
    keyNum: 'ABC0001233',
    infoNeededIna: 'A30',
    _ItemId: '5f0b331c-94ae-4378-9ecd-8af41f74502d'
  }
]

元素也是有序的,但不一定是降序的。

数组中的数据来自我从 API 调用的 JSON 字符串。 keyNum 是订单号。 B 本质上是父级,其中包含我从中获取的数据库中的 A 记录。不幸的是,我在B中需要的信息并没有包含在A的记录中

我需要

infoNeededIna 
进入 a 记录,其中
keyNum
在 a 和 b 之间相等。 a 和 b 具有多对一的关系,因此跟踪我在 b 中查找的索引可能比每次从第一个记录开始搜索更有效。

我知道如何暴力破解,但我想看看是否有人知道更优雅的解决方案。

我现在的想法是,我可以使用一个循环遍历 a 并使用

keyNum
然后将内部循环引导到 b 中以搜索 b 的相关索引并获取
infoNeededIna

javascript arrays performance
1个回答
0
投票

只需创建一个地图并从中更新:

const a = [
  {
    keyNum: 1,
    extra: 'test'
  }
]

const b = [
  {
    keyNum: 1,
    extra2: 'from B'
  }
];


const map = b.reduce((r, item) => (r[item.keyNum] = item, r), {});
a.forEach(a => Object.assign(a, map[a.keyNum]));

console.log(a);

© www.soinside.com 2019 - 2024. All rights reserved.