根据函数匹配对象属性

根据提供的函数,比较两个对象以确定第一个对象是否包含与第二个对象相等的属性值。

  • 使用Object.keys()获取第二个对象的所有键。
  • 使用Array.prototype.every()Object.prototype.hasOwnProperty()和提供的函数来确定所有键是否存在于第一个对象中,并且具有相等的值。
  • 如果没有提供函数,则使用相等运算符来比较值。
const matchesWith = (obj, source, fn) =>
  Object.keys(source).every(key =>
    obj.hasOwnProperty(key) && fn
      ? fn(obj[key], source[key], key, obj, source)
      : obj[key] == source[key]
  );

const isGreeting = val => /^h(?:i|ello)$/.test(val);
matchesWith(
  { greeting: 'hello' },
  { greeting: 'hi' },
  (oV, sV) => isGreeting(oV) && isGreeting(sV)
); // true