Javascript 按键比较2个对象

Javascript 按键比较2个对象,javascript,node.js,object,compare,Javascript,Node.js,Object,Compare,我有两个目标: let obj1 = { username: Jake, progress: 100 }; let obj2 = { username: Jake, progress: 200, updatedAt: timestamphere }; 我想要一个函数,如果这两个对象中的某些键不相同,它将返回true 例如,它将是username和progress,但不是updatedAt(当1时会更多) 功能比较对象(键) 例如: if (compareObjectsBy

我有两个目标:

let obj1 = {
  username: Jake,
  progress: 100
};

let obj2 = {
  username: Jake,
  progress: 200,
  updatedAt: timestamphere
};
我想要一个函数,如果这两个对象中的某些键不相同,它将返回true

例如,它将是
username
progress
,但不是
updatedAt
(当1时会更多)

功能比较对象(键)

例如:

if (compareObjectsByKeys(['username', 'progress']) {
  // do something
}


首先使用
every
确保所有键都在两个对象中,然后使用
some
检查备用值

constobj1={用户名:“Jake”,进度:100};
const obj2={用户名:“Jake”,进度:200,更新日期:“timestameshere”};
const compareObjectsByKeys=keys=>keys.every(key=>key in obj1和key in obj2)和key.some(key=>obj1[key]!=obj2[key]);

log(compareObjectsByKeys([“username”,“progress”]);
您还需要传递这两个对象

compareObjectsByKeys(obj1, obj2, keys) {
    for (key of keys) {
        if (obj1[key] !== obj2[key]) {
            return true;
        }
    }

    return false;
}
由于
是一个字符串数组

您可以在您的键数组上使用
.every()
来检查对象1的每个键值对是否等于对象2的键值对。我还使用了
JSON.stringify
,以便我们可以比较数组和其他对象

const obj1={
用户名:“Jake”,
进展:100
};
常数obj2={
用户名:“Jake”,
进展:200,
updatedAt:'timestamphere'
}
函数比较对象键(键){
return!keys.every(obj1中的k=>k和obj2中的k&&JSON.stringify(obj1[k])==JSON.stringify(obj2[k]);
}
log(compareObjectsByKeys(['username','progress']);//true
log(compareObjectsByKeys(['username']);//false

console.log(compareObjectsByKeys(['foo']);//true(在本例中未定义!=未定义)
通过传递有什么用?要检查
obj1
obj2
是否有这些键吗?@NickParsons是的,如果
obj1
obj2
用户名和
进度都有不同的值,那么它应该返回true。您尝试了什么?您的问题应该表明您自己或至少是这样做的请告诉我您遇到了什么问题。这个比较,它还会尝试比较对象吗?如数组、函数、正则表达式、日期等?如果您已经检查了每个键,为什么不在
每次调用中也包括比较?因为如果两个键中有一个不匹配,那么
每个
仍将返回
false