首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查两个地图在JavaScript中是否具有相同的密钥集

如何检查两个地图在JavaScript中是否具有相同的密钥集
EN

Stack Overflow用户
提问于 2018-08-27 04:03:03
回答 5查看 840关注 0票数 0

假设有两个Map对象,如何检查它们的键集是否相同?

例如:

代码语言:javascript
复制
const A = new Map();
A.set('x', 123);
A.set('y', 345);

const B = new Map();
B.set('y', 567);
B.set('x', 789);

const C = new Map();
C.set('x', 121);
C.set('y', 232);
C.set('z', 434);

在本例中,AB映射都具有相同的键集(即['x', 'y']),而C的键集则不同,因为它具有额外的键z

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-08-27 04:10:36

您可以检查大小,然后遍历一个map的键,并检查另一个map是否也包含这些键。

代码语言:javascript
复制
const A = new Map();
A.set('x', 123);
A.set('y', 345);

const B = new Map();
B.set('y', 567);
B.set('x', 789);

const C = new Map();
C.set('x', 121);
C.set('y', 232);
C.set('z', 434);

function sameKeys(a, b) {
  if (a.size != b.size) {
    return false;
  }

  for (let key in a.keys()) {
    if (!b.has(key)) {
      return false;
    }
  }

  return true;
}

console.log(sameKeys(A, B));
console.log(sameKeys(A, C));

票数 1
EN

Stack Overflow用户

发布于 2018-08-27 04:06:27

检查每个映射的size是否相同,然后迭代一个映射的keys,并检查另一个映射中是否也存在该键。利用Array.prototype.every.call意味着不需要创建中间数组:

代码语言:javascript
复制
const A = new Map();
A.set('x', 123);
A.set('y', 345);

const B = new Map();
B.set('y', 567);
B.set('x', 789);

const C = new Map();
C.set('x', 121);
C.set('y', 232);
C.set('z', 434);

const sameKeySet = (m1, m2) => (
  m1.size === m2.size
  && Array.prototype.every.call(m1.keys(), key => m2.has(key))
);
console.log(sameKeySet(A, B));
console.log(sameKeySet(A, C));

票数 5
EN

Stack Overflow用户

发布于 2018-08-27 04:12:27

通过扩展keys()方法返回的迭代器,可以将Map键转换为数组:

代码语言:javascript
复制
const aKeys = [...A.keys()];

然后你只需要比较所有的键数组。对于您出现的情况,您可以简单地执行以下操作:

代码语言:javascript
复制
const A = new Map();
A.set('x', 123);
A.set('y', 345);

const B = new Map();
B.set('y', 567);
B.set('x', 789);

const C = new Map();
C.set('x', 121);
C.set('y', 232);
C.set('z', 434);

const aKeys = [...A.keys()];
const bKeys = [...B.keys()];
const cKeys = [...C.keys()];

console.log(aKeys.sort().toString() == bKeys.sort().toString());
console.log(aKeys.sort().toString() == cKeys.sort().toString());
console.log(bKeys.sort().toString() == cKeys.sort().toString());

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52029842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档