故障排除:比较两个地图的键(Javascript)
Troubleshooting: comparing keys of two maps (Javascript)
所以我正在尝试比较两个地图的键。下面的代码在语法上是有效的;然而,它 returns 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)
您的 ing.keys() == sc.keys()
比较有缺陷。
Map.prototype.keys()
方法 return 是一个 Iterator 到包含 Map 的所有键(按插入顺序排序)的对象。由于 ing.keys()
和 sc.keys()
是 returning 单独的对象,即使它们可能具有相同的键,两个值的比较将 总是 return false
.
keys()
方法正在返回单独的数组对象。尽管它们中的所有元素都相同,但它们是两个独立的对象,因此并不相等。
您需要的是深度相等,您可以自己编写或引入依赖项,例如 UnderscoreJS。他们有一个可爱的 isEqual()
功能,可以为您进行深度比较。
您可以查看 Map#size
of both maps and take the key in an array and check against with 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));
所以我正在尝试比较两个地图的键。下面的代码在语法上是有效的;然而,它 returns 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)
您的 ing.keys() == sc.keys()
比较有缺陷。
Map.prototype.keys()
方法 return 是一个 Iterator 到包含 Map 的所有键(按插入顺序排序)的对象。由于 ing.keys()
和 sc.keys()
是 returning 单独的对象,即使它们可能具有相同的键,两个值的比较将 总是 return false
.
keys()
方法正在返回单独的数组对象。尽管它们中的所有元素都相同,但它们是两个独立的对象,因此并不相等。
您需要的是深度相等,您可以自己编写或引入依赖项,例如 UnderscoreJS。他们有一个可爱的 isEqual()
功能,可以为您进行深度比较。
您可以查看 Map#size
of both maps and take the key in an array and check against with 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));