2020-08-04
描述
基于提供的函数对两个对象进行比较,以确定第一个对象中是否包含有第二个对象中相同的属性值。
提示
- 使用
Object.keys()
获取第二个对象的所有键 - 使用
Array.prototype.every()
和Object.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