如何确定JavaScript对象值的相等性?

如何确定JavaScript对象值的相等性?,javascript,Javascript,在给定对象中,所有属性值都相同 var obj = { property1: 'Some Value', property2: 'Some Value', property3: 'Some Value', property4: 'Some Value' } 如果所有值都相同,则函数checkEquality应返回true,否则返回false 我可以做到以下几点: function checkEquality () { var compare = obj.

在给定对象中,所有属性值都相同

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;
}
但是这个解决方案到目前为止还不是最好的。

你可以用它

each
方法对数组中存在的每个元素执行一次提供的
回调
函数,直到找到其中一个
callback
返回falsy值(转换为布尔值时变为
false
)。如果找到这样的元素,
every
方法立即返回
false
。否则,如果
callback
为所有元素返回了
true
值,
every
将返回
true
<代码>回调仅对具有赋值的数组索引调用;对于已删除或从未赋值的索引,不会调用它

var obj={propery1:'Some Value',propery2:'Some Value',propery3:'Some Value',propery4:'Some Value'},
equal=对象键(obj).every(函数(k,i,kk){
return!i | | obj[kk[0]==obj[k];
});

console.log(相等)
伟大的答案@Nina,我想使用
reduce
和ES6语法添加一些不同的内容:

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;
}

我认为使用
。一些
来确定任何元素是否不同会更为理想,因为它会在第一个差异处终止,因此检查每个元素只会是最坏的情况。但是如果
为false
,则reduce不会停止。如果
false
是要测试的值,该怎么办?1。我知道:)我已经对你的回答发表了评论,充分意识到我的方法的这个缺点。2.查看链接的小提琴(
false===false