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

时间:2016-06-29 10:17:32

标签: javascript

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

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

但到目前为止这个解决方案并不是最好的。

2 个答案:

答案 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}

https://jsfiddle.net/9tb5mdoL/