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
。