我正在嘗試獲取一個鍵陣列,由于比較兩個物件而不同。我只能使用isEqualWithand來做到這一點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/[email protected]/lodash.min.js"></script>
<script>const lodash = _;</script>
問題是:有沒有更好的方法來獲取使用 lodash 不同的物件的鍵?
uj5u.com熱心網友回復:
由于您只需要比較鍵相同但值可能不同的物件,因此您可以利用keys()or 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/[email protected]/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/[email protected]/lodash.min.js"></script>
<script>const lodash = _;</script>
對于這種功能,Lodash 可能是矯枉過正。簡單的 JavaScript 等價物是Object.keys()and 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://www.uj5u.com/qianduan/483569.html
標籤:javascript 打字稿 目的 钥匙 罗达什
上一篇:如何在javascript中通過id更新陣列中的嵌套物件屬性?
下一篇:物件陣列到多級樹視圖
