我有两个对象:
let obj1 = {
username: Jake,
progress: 100
};
let obj2 = {
username: Jake,
progress: 200,
updatedAt: timestamphere
};
我想要的函数,如果这两个对象中的某些键在不相同的情况下会返回true。
例如,它将是username
和progress
,而不是updatedAt
(当1时会更
函数compareObjectsbykeys(键(;
例如:
if (compareObjectsByKeys(['username', 'progress']) {
// do something
}
首先使用 every
以确保所有键都在两个对象中,然后使用 some
检查替代值。
const obj1 = {username:"Jake",progress:100};
const obj2 = {username:"Jake",progress:200,updatedAt:"timestamphere"};
const compareObjectsByKeys = keys => keys.every(key => key in obj1 && key in obj2) && keys.some(key => obj1[key] != obj2[key]);
console.log(compareObjectsByKeys(["username", "progress"]));
您还需要通过两个对象
compareObjectsByKeys(obj1, obj2, keys) {
for (key of keys) {
if (obj1[key] !== obj2[key]) {
return true;
}
}
return false;
}
keys
是字符串数组
您可以在键阵列上使用 .every()
,以检查一个来自对象的键值对是否等于对象两个的键值。我还使用了JSON.stringify
,以便我们可以比较数组和其他对象。
const obj1 = {
username: 'Jake',
progress: 100
};
const obj2 = {
username: 'Jake',
progress: 200,
updatedAt: 'timestamphere'
}
function compareObjectsByKeys(keys) {
return !keys.every(k => k in obj1 && k in obj2 && JSON.stringify(obj1[k]) === JSON.stringify(obj2[k]));
}
console.log(compareObjectsByKeys(['username', 'progress'])); // true
console.log(compareObjectsByKeys(['username'])); // false
console.log(compareObjectsByKeys(['foo'])); // true (in this case undefined != undefined)