通过键比较2个对象

时间:2019-08-04 01:57:53

标签: javascript node.js object compare

我有两个对象:

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

let obj2 = {
  username: Jake,
  progress: 200,
  updatedAt: timestamphere
};

我想要一个函数,如果这两个对象中的某些键不同,则该函数将返回true。

例如,它将是usernameprogress,而不是updatedAt(如果为1,则更多。

  

function compareObjectsByKeys(keys);

例如:

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

3 个答案:

答案 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)