我正在尝试获取一个键数组,通过比较两个对象,这些键是不同的。我只能使用isEqualWith
和mapKeys
来完成它,如下所示:
const differencies = [];
const objA = {
a: 1,
b: 2,
c: 3
};
const objB = {
a: 1,
b: 2,
c: 100
};
function customizer(objOne, objTwo) {
if (lodash.isEqual(objOne, objTwo)) {
return true;
}
lodash.mapKeys(objOne, (value, key) => {
if (value !== objTwo[key]) {
differencies.push(key);
}
});
return false;
}
lodash.isEqualWith(objA, objB, customizer);
console.log(differencies);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>const lodash = _;</script>
的问题是:是否有更好的方法来获取不同对象的键?
发布于 2022-05-25 16:06:28
因为您只需要比较键相同但值可能不同的对象,所以可以利用keys()
或keysIn()
(如果还想遍历原型链)并删除与filter()
没有匹配值的所有条目。
const objA = { a: 1, b: 2, c: 4 };
const objB = { a: 1, b: 2, c: 100 };
const differencies = lodash.filter(
lodash.keys(objA),
key => objA[key] !== objB[key]
);
console.log(differencies);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>const lodash = _;</script>
交替使用链式语法
const objA = { a: 1, b: 2, c: 4 };
const objB = { a: 1, b: 2, c: 100 };
const differencies = lodash(objA)
.keys()
.filter(key => objA[key] !== objB[key]);
console.log(differencies);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
<script>const lodash = _;</script>
对于这类功能,Lodash可能是一种过度使用。简单JavaScript等价为Object.keys()
和Array#filter()
const objA = { a: 1, b: 2, c: 4 };
const objB = { a: 1, b: 2, c: 100 };
const differencies = Object.keys(objA)
.filter(key => objA[key] !== objB[key]);
console.log(differencies);
https://stackoverflow.com/questions/72380171
复制相似问题