Javascript 比较对象之间的属性子集

Javascript 比较对象之间的属性子集,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一种非常简单的方法来比较两个对象属性的子集。当子集中有许多属性时,就很难读取。有什么其他选择吗 const obj1 = {a: 22, b: 33, c: 44}; const obj2 = {a: 22, b: 34, c: 44}; JSON.stringify([obj1.a, obj1.b]) === JSON.stringify([obj2.a, obj2.b]) 子集比较:SubsetCompare函数对两个对象的子集进行平面比较 设obj1={a:22,b:34,c:

我有一种非常简单的方法来比较两个对象属性的子集。当子集中有许多属性时,就很难读取。有什么其他选择吗

const obj1 = {a: 22, b: 33, c: 44};
const obj2 = {a: 22, b: 34, c: 44};

JSON.stringify([obj1.a, obj1.b]) === JSON.stringify([obj2.a, obj2.b]) 
子集比较:SubsetCompare函数对两个对象的子集进行平面比较

设obj1={a:22,b:34,c:44}; 设obj2={a:22,b:34,c:10}; 让subsetCompare=obj1,obj2,keys=>keys.everykey=>obj1[key]==obj2[key]; console.logsubsetCompareobj1,obj2,['a','b']; console.logsubsetCompareobj1,obj2,['a','b','c']子集比较:SubsetCompare函数对两个对象的子集进行简单比较

设obj1={a:22,b:34,c:44}; 设obj2={a:22,b:34,c:10}; 让subsetCompare=obj1,obj2,keys=>keys.everykey=>obj1[key]==obj2[key]; console.logsubsetCompareobj1,obj2,['a','b'];
console.logsubsetCompareobj1,obj2,['a','b','c']为什么不使用函数

设obj1={a:22,b:33,c:44}; 设obj2={a:22,b:34,c:44}; console.logcompareObjectsobj1,obj2,[`a`,`b`];//错误的 console.logcompareObjectsobj1,obj2,[`a`,`c`];//符合事实的 console.logcompareObjectsobj1,obj2,[`b`,`c`];//错误的 函数比较对象SOBJ1、obj2、键{ 让我; 对于i=keys.length-1;i>-1&&obj1[keys[i]]==obj2[keys[i]];i-; 返回i==-1;//如果i等于-1,则它会遍历整个循环,并且在第二个条件下不会失败
} 为什么不使用函数呢

设obj1={a:22,b:33,c:44}; 设obj2={a:22,b:34,c:44}; console.logcompareObjectsobj1,obj2,[`a`,`b`];//错误的 console.logcompareObjectsobj1,obj2,[`a`,`c`];//符合事实的 console.logcompareObjectsobj1,obj2,[`b`,`c`];//错误的 函数比较对象SOBJ1、obj2、键{ 让我; 对于i=keys.length-1;i>-1&&obj1[keys[i]]==obj2[keys[i]];i-; 返回i==-1;//如果i等于-1,则它会遍历整个循环,并且在第二个条件下不会失败
} 根据@revilheart的回答,但根据@Ryan的所有建议:

设obj1={a:22,b:33,c:44}; 设obj2={a:22,b:34,c:44}; console.logcompareObjectsobj1,obj2,[`a`,`b`];//错误的 console.logcompareObjectsobj1,obj2,[`a`,`c`];//符合事实的 console.logcompareObjectsobj1,obj2,[`b`,`c`];//错误的 函数比较对象SOBJ1、obj2、键{ return keys.everykey=>obj1[key]==obj2[key]
} 根据@revilheart的回答,但根据@Ryan的所有建议:

设obj1={a:22,b:33,c:44}; 设obj2={a:22,b:34,c:44}; console.logcompareObjectsobj1,obj2,[`a`,`b`];//错误的 console.logcompareObjectsobj1,obj2,[`a`,`c`];//符合事实的 console.logcompareObjectsobj1,obj2,[`b`,`c`];//错误的 函数比较对象SOBJ1、obj2、键{ return keys.everykey=>obj1[key]==obj2[key]

}这是一个主要基于观点的问题,因为你将获得很多基于经验等的观点。因此,这个问题应该结束。@Ele我明白了。关于如何/从何处获得帮助以找到我的代码的替代方案,有什么建议吗?@Ele:这种问题对于堆栈溢出来说是非常标准的。@Ryan请稍等,您将看到许多替代方案/意见。到目前为止有两个。@Ele:好吗?“很多选择”不是问题。这主要是一个基于意见的问题,因为你将获得很多基于经验等的意见。因此,这个问题应该结束。@Ele我明白了。关于如何/从何处获得帮助以找到我的代码的替代方案,有什么建议吗?@Ele:这种问题对于堆栈溢出来说是非常标准的。@Ryan请稍等,您将看到许多替代方案/意见。到目前为止有两个。@Ele:好吗?“有很多选择”不是问题。嵌套对象会发生什么情况?你是说every而不是forEach,obj1[key]而不是obj1.key并返回一个值吗?@Ryan你的眼睛很锐利,因为它是ES6,你可以使用箭头函数。everykey=>obj1[key]==obj2[key]你没有to@Ele添加了深度和平面比较。嵌套对象会发生什么情况?您是指every而不是forEach,是指obj1[key]而不是obj1.key并返回值吗?@Ryan您的眼睛很锐利,因为它是ES6,您可以使用箭头函数。everykey=>obj1[key]==obj2[key]你没有to@Ele添加了深度和平面比较。Array.prototype.every将更快地给出否定答案,而且非常简洁。@Ryan不确定如何使用它,但使用了一个更短的方法编辑了我的答案,该方法解析速度更快,因为它不必检查每个键,但一旦找到不同的值,就会返回false。return keys.everykey=>obj1[key]==obj2[key]Array.prototype.each会更快地给出否定答案,而且很好而且很短。@Ryan不太确定如何使用它,但用一个更短的方法编辑了我的答案,因为它不必检查每个键,但一旦发现不同的值,就会返回false。return keys.everykey=>obj1[ 键]==obj2[键]