通过键比较2个对象



我有两个对象:

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

我想要的函数,如果这两个对象中的某些键在不相同的情况下会返回true。

例如,它将是usernameprogress,而不是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)

相关内容

  • 没有找到相关文章

最新更新