【问题标题】:Troubleshooting: comparing keys of two maps (Javascript)疑难解答:比较两个地图的键(Javascript)
【发布时间】:2020-08-18 16:30:50
【问题描述】:

所以我试图比较两张地图的键。下面的代码在语法上是有效的;但是,即使两个映射的键相似,它也会返回 false。这可能是什么问题?

const sc = new Map ();
sc.set ("item1",1)
sc.set ("item2",1)
sc.set ("item3",2)
sc.set ("item4",1) //ounce per serving //

const ing = new Map();
ing.set ("item1",1)
ing.set ("item2",1)
ing.set ("item3",2)
ing.set ("item4",1) //ounce per serving //

function compareMaps (map1,map2) {
if (ing.keys() == sc.keys() && (ing.size == sc.size)) {
    return "true"
} 
    return "false"

} 

compareMaps(ing, sc)

【问题讨论】:

标签: javascript maps key


【解决方案1】:

您可以检查两个映射的Map#size,然后将键放入数组中,然后使用Map#has 进行检查。

const sc = new Map();
sc.set("item1", 1)
sc.set("item2", 1)
sc.set("item3", 2)
sc.set("item4", 1) //ounce per serving //

const ing = new Map();
ing.set("item1", 1)
ing.set("item2", 1)
ing.set("item3", 2)
ing.set("item4", 1) //ounce per serving //

function compareMaps(map1, map2) {
    return map1.size === map2.size && [...ing.keys()].every(Map.prototype.has, map2);
}

console.log(compareMaps(ing, sc));

【讨论】:

【解决方案2】:

您的ing.keys() == sc.keys() 比较有缺陷。

Map.prototype.keys() 方法返回一个 Iterator 到包含 Map 的所有键的对象(按插入顺序排序)。由于ing.keys() 和sc.keys() 返回的是不同的对象,即使它们可能有相同的键,两个值的比较总是会返回false。

【讨论】:

    【解决方案3】:

    keys() 方法返回单独的数组对象。虽然它们中的所有元素都是相同的,但它们是两个独立的对象,因此并不相等。

    您需要的是一个深度相等,您可以自己编写或引入依赖项,例如 UnderscoreJS。他们有一个可爱的isEqual() 函数,可以为您进行深入比较。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多