在给定对象中,所有属性值都相同。
var obj = {
property1: 'Some Value',
property2: 'Some Value',
property3: 'Some Value',
property4: 'Some Value'
}
如果所有值都相同,则函数checkEquality应返回true,否则返回false。
我可以做到以下几点来实现它:
function checkEquality () {
var compare = obj.propery1;
for (var key in obj) {
if (obj[key] !== compare) {
return false;
}
}
return true;
}
但到目前为止这个解决方案并不是最好的。
答案 0 :(得分:4)
您可以使用Array#every
。
every
方法为数组中的每个元素执行一次提供的callback
函数,直到找到callback
返回 falsy 值的值(a转换为布尔值时变为false
的值。如果找到这样的元素,every
方法会立即返回false
。否则,如果callback
为所有元素返回true
值,every
将返回true
。仅为已分配值的数组的索引调用callback
;对于已删除或从未分配过值的索引,不会调用它。
var obj = { propery1: 'Some Value', propery2: 'Some Value', propery3: 'Some Value', propery4: 'Some Value' },
equal = Object.keys(obj).every(function (k, i, kk) {
return !i || obj[kk[0]] === obj[k];
});
console.log(equal);

答案 1 :(得分:1)
@Nina给出了很好的答案,我只想使用const sameValues = (obj ) => {
let keys = Object.keys( obj );
let initial = obj[ keys[0] ];
// val will be either the initial value or false
let val = keys.reduce( (prev, cur) => ( obj[cur] === prev ? prev : false ), initial );
return val === initial;
}
和ES6语法添加不同的内容:
version=${project.version}
artifactId=${project.artifactId}
groupId=${project.groupId}