Lodash isEqual -如何获取不同对象的键



我试图获得一个键数组,由于比较两个对象而不同。我只能使用isEqualWithmapKeys来做,如下所示:

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>

问题是:是否有更好的方法来获取使用lodash不同的对象的键?

因为您只需要比较键相同但值可能不同的对象,您可以利用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);

最新更新