我试图找出什么是最好的方法来获得两个对象之间的交叉对象使用es6。我的意思是这样的东西:
a = {a:'a',b:'b',c:'c', d:'d'};
b = {a:'a',b: '1', c:'c', d:'2', f'!!!'}
// result I want:
c = getDifference(a,b)
//c is now: {b:'1', d:'2'}
使用es6是否有一个简单的方法来实现这一点,或者我是否需要使用for(in)和Object.keys()迭代a对象并进行比较,将交集赋给c?
(a,b) => {
const c = {};
for(const _key in Object.keys(a)){
if(b[_key] && b[_key] !== a[_key]){
c[_key] = b[_key];
}
}
return c;
}
我知道loadash/underline有这些类型的帮助函数......但是尝试看看es6是否有任何新的简短语法,如果没有,使用vanilla js做这件事的最短方法是什么。
3条答案
按热度按时间x33g5p2x1#
使用
reduce
可以获得更简洁的代码,但您的方法是最清晰的:我们使用
Object.entries
来避免得到Object.keys
的值--这样更容易,因为b[k]
可能不存在,我们使用短路逻辑AND&&
操作符--所以如果a
中的键 * 不 * 存在于b
中,它就不会被添加到结果对象中,然后我们检查两个值是否相等--如果它们 * 相等 *,那么不需要添加任何内容,但是如果它们不是 not,我们将b
中的键和值添加到result对象中,在这两种情况下,我们都返回result对象。lh80um4z2#
你可以使用
Object.entries()
得到对象b
的条目,然后使用.filter()
过滤掉与a
中相同的键值对,然后,你可以使用Object.fromEntries()
重建你的对象,如下所示:如果您不支持
Object.fromEntries()
,那么您可以使用.reduce()
来构建对象:mkshixfv3#
您可以使用
Object.keys()
在单个短路中实现这一点;您也可以将
.map()
用于相同