有没有更有效的方法来匹配 JavaScript 中对象数组和映射之间的键?

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

我有一个对象数组 arr1,其中每个对象都有多个属性。我还有一个映射,map2,其中键是字符串,值可以是任何类型。我的目标是找到 arr1 和 map2 之间的匹配键。

这是我当前拥有的代码示例:

// Assume arr1 is an array of objects, each object having multiple properties
var arr1 = [{Alice: 1, Bob: 2}, {Alice: 2,Charlie: 3, David: 4}, {Charlie: 4,Eve: 5, Frank: 6}];
// Assume map2 is a map, with keys as strings and values of any type
var map2= new Map();
map2.set("Alice", 1);
map2.set("David", 2);
map2.set("Eve", 3);

// Original nested for loop
for (var i = 0; i < arr1.length; i++) {
  for (var [key, value] of map2) {
    for (var name in arr1[i]) {
      if (arr1[i][name] == key) {
          arr1[i][name] = map2.get(key)
      }
    }
  }
}

// Optimized nested for loop
for (var i = 0; i < arr1.length; i++) {
  for (var name in arr1[i]) {
    if (map2.has(name)) {
       arr1[i][name] = map2.get(name)
    }
  }
}

代码按预期工作,但我想知道是否可以进行进一步的优化以提高其效率。目前,我迭代 arr1 并根据 map2 中的键检查每个对象的每个属性。如果找到匹配,则记录匹配的密钥。但是arr1数据量大,map key数量多,效率低下,不知道有没有更好的办法

是否有更有效的方法来达到相同的结果?任何建议或见解将不胜感激。谢谢!

javascript arrays
1个回答
0
投票

从数组中创建唯一键的Set,从映射中提取键,然后使用filter()删除集合中未包含的任何内容。

const arr1 = [{Alice: 1, Bob: 2}, {Alice: 2,Charlie: 3, David: 4}, {Charlie: 4,Eve: 5, Frank: 6}];
const map2= new Map();
map2.set("Alice", 1);
map2.set("David", 2);
map2.set("Eve", 3);

const arrKeys = new Set(arr1.flatMap(Object.keys));

const matchingKeys = Array.from(map2.keys()).filter((key) => arrKeys.has(key));
console.log(matchingKeys);

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