NodeJS 如何在JavaScript中基于索引迭代两个Map

ohfgkhjo  于 2023-04-29  发布在  Node.js
关注(0)|答案(3)|浏览(130)

我只是通过使用下面的代码行在JavaScript中创建了两个Map。

let myMap = new Map();
let myMap1 = new Map();

我只是在相应的Map中添加了以下数据。
//下面只是举例和实际不一样

myMap1 = new Map([
  ['country', 'Chile'],
  ['age', 30],
]);

myMap = new Map([
  ['country', 'Austria'],
  ['age', 20],
]);

这里保留两个map是有原因的,因为在真实的操作中,我试图从两个不同的模式中获取数据,以便在Map中存储两个不同的数据。
现在,我尝试按以下顺序迭代both Map

Iteration-1 : country, Chile, country, Austria. //Index 0 from both the maps

Iteration-2 : age, 30 , age, 20.  // Index 1 from both the maps.

我只想在单个forEach中迭代两个Map,我想同时获取index value和key,并将其传递给其他逻辑操作。
有人能帮我解决这个问题吗?
我尝试了下面的方法来迭代一个Map,但不知道如何处理两个Map

myMap.forEach (function(value, key) {
                            let array = key.split(":::");
                            htmlSkelton += 
                            "<tr>"+
                            "<th scope='row'>"+(counter++) +"</th>"+
                            "<td>"+array[1]+"</td>"+
                            "<td>"+array[0]+"</td>"+
                            "<td>"+value+"</td>"+
                            "</tr>"
                          })
wbgh16ku

wbgh16ku1#

由于两个Map具有相同的键,因此可以简单地迭代一个Map,并使用其键访问另一个Map。

myMap1 = new Map([
  ['country', 'Chile'],
  ['age', 30],
]);

myMap2 = new Map([
  ['country', 'Austria'],
  ['age', 20],
]);

myMap1.forEach((v1, k) => {
  let v2 = myMap2.get(k);
  console.log(k, v1, v2);
});
tf7tbtn2

tf7tbtn22#

使用字符串插值而不是串联,以使代码更具可读性:

const map1 = new Map([
  ['country', 'Chile'],
  ['age', 30],
]);

const map2 = new Map([
  ['country', 'Austria'],
  ['age', 20],
]);

map1.forEach((v1, k) => {
  const v2 = map2.has(k) ? map2.get(k) : null;
  console.log(`${k}: ${v1}, ${v2}`);
});

有几种方法可以做到这一点,看看这一个是否完全适合你。

afdcj2ne

afdcj2ne3#

这里可以使用reduce。复杂度为O(n),需要额外的内存来实现聚合数组:

const map1 = new Map([
  ['country', 'Chile'],
  ['age', 30],
]);

const map2 = new Map([
  ['country', 'Austria'],
  ['age', 20],
]);

const arr = [...map1.entries(), ...map2.entries()];

/** 
 * Generates a structure like: 
 * {
 *   age: [30, 20],
 *   country: ["Chile", "Austria"]
 * }
 */
const result = arr.reduce((acc, [k, v]) => {
  if (acc[k]) {
    acc[k].push(v);
  } else {
    acc[k] = [v];
  }
  return acc;
}, {});

console.log(result);

相关问题