我有两个对象:
let obj1 = {
username: Jake,
progress: 100
};
let obj2 = {
username: Jake,
progress: 200,
updatedAt: timestamphere
};
我想要一个函数,如果这两个对象中的某些键不同,则该函数将返回true。
例如,它将是username
和progress
,而不是updatedAt
(如果为1,则更多。
function compareObjectsByKeys(keys);
例如:
if (compareObjectsByKeys(['username', 'progress']) {
// do something
}
答案 0 :(得分:1)
首先使用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"]));
答案 1 :(得分:0)
您还需要同时传递两个对象
compareObjectsByKeys(obj1, obj2, keys) {
for (key of keys) {
if (obj1[key] !== obj2[key]) {
return true;
}
}
return false;
}
keys
是字符串数组
答案 2 :(得分:0)
您可以在键数组上使用.every()
,以检查对象1的每个键值对是否等于对象2的对。我还使用了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)