JavaScript中如何判断两个属性数量相同的对象是否相等?
正确比较两个对象是否等值的方法
你的代码返回false有两个核心问题:
- 回调函数没有返回结果:你写的三元表达式没有用
return,所以every收到的是undefined,会被视为false - 逻辑错误:你只在比较两个对象的键名是否按索引位置相等,完全没判断键对应的值是否相等
修正后的实现
既然你确认两个对象的属性数量始终相同,我们可以直接遍历其中一个对象的键,逐一比较对应的值:
const priceOne = { "price": 14.31, "taxes": 2.00, "total": 16.31 } const priceTwo = { "price": 14.31, "taxes": 2.00, "total": 16.31 } const comparePrice = Object.keys(priceOne).every(key => { // 比较当前键在两个对象中的值 return priceOne[key] === priceTwo[key]; }) console.log(comparePrice); // 输出 true
额外注意点
- 如果对象里包含浮点数,要注意JS的浮点数精度问题(比如
0.1 + 0.2 !== 0.3),这种情况可以用差值判断:return Math.abs(priceOne[key] - priceTwo[key]) < 0.0001; - 如果对象里还有嵌套对象,上面的方法就不适用了,需要递归比较每个嵌套层级的键和值。
内容的提问来源于stack exchange,提问作者eneooo
相关产品推荐
相关产品推荐

