如何解决故障排除:比较两个地图的键JavaScript
所以我正在尝试比较两个地图的键。以下代码在语法上有效;但是,即使两个映射的键相似,它也会返回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)
解决方法
您可以检查两个地图的enter image description here并将其放在数组中,然后使用Map#size
进行检查。
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));
,
您的ing.keys() == sc.keys()
比较有缺陷。
Map.prototype.keys()
方法将 Iterator 返回到包含Map的所有键的对象(按插入顺序排序)。由于ing.keys()
和sc.keys()
返回的是单独的对象,即使它们可能具有相同的键,所以两个值的比较也会始终返回false
。
keys()
方法将返回单独的数组对象。尽管其中的所有元素都是相同的,但它们是两个单独的对象,因此不相等。
您需要的是深层相等,您可以自己编写或引入依赖项,例如UnderscoreJS。他们有一个可爱的isEqual()
函数,可以为您做深层比较。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。