gpt4 book ai didi

javascript - 如何使用 Javascript 或 lodash 对两个对象的属性进行浅比较?

转载 作者:可可西里 更新时间:2023-11-01 01:35:39 26 4
gpt4 key购买 nike

有没有一种方法可以进行浅比较,不会深入比较 Javascript 或 lodash 中对象内部的对象内容?请注意,我确实检查了 lodash,但它似乎执行了我不想做的深度比较。

var a = { x: 1, y: 2}
var b = { x: 1, y: 3}

有什么方法可以比较 ab 吗?

最佳答案

简单的 ES6 方法:

const shallowCompare = (obj1, obj2) =>
Object.keys(obj1).length === Object.keys(obj2).length &&
Object.keys(obj1).every(key => obj1[key] === obj2[key]);

这里我添加了对象键数量相等检查,下面的比较应该会失败(一个重要的情况,通常不会考虑在内):

shallowCompare({ x: 1, y: 3}, { x: 1, y: 3, a: 1}); // false

2019 年更新。根据 Andrew Rasmussen 的评论,我们还需要考虑 undefined 的大小写。先前方法的问题在于以下比较返回 true:

({ foo: undefined })['foo'] === ({ bar: undefined })['foo'] // true

因此,需要显式 key 存在性检查。这可以通过 hasOwnProperty 来完成:

const shallowCompare = (obj1, obj2) =>
Object.keys(obj1).length === Object.keys(obj2).length &&
Object.keys(obj1).every(key =>
obj2.hasOwnProperty(key) && obj1[key] === obj2[key]
);

关于javascript - 如何使用 Javascript 或 lodash 对两个对象的属性进行浅比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com