我有一个json对象示例
var obj = { a: "sample", b: "sample", c: "sample" };
我希望检查每个密钥是否具有相同的值。
if(a === b || b === c || c === a){
console.log("Error");
}
有没有更好的方法来检查这些值?任何想法都会有所帮助。谢谢!
答案 0 :(得分:1)
您发布的代码永远不会打印Error
。
您正在引用不存在的值。
修复此问题:
if(obj.a === obj.b || obj.b === obj.c || obj.c === obj.a){
console.log("Error");
}
你也可以这样做:
var firstObj = '';
var i = 0;
var areDifferent = false;
for var prop in obj {
if (i == 0){
firstObj = obj[property]
}
if (firstObj != obj[property]){
areDifferent = true;
}
i++;
}
if (areDifferent){
//your code here
}
上面的代码将遍历所有obj
属性,以检查它们是否都与第一个属性相同 - 这意味着它们是相同的。
答案 1 :(得分:1)
您可以使用Object.keys和array.every并将所有值与第一个值进行比较:
var obj = { a: "sample", b: "sample", c: "sample" };
var keys = Object.keys(obj);
var first = obj[keys[0]]
var sameValue = keys.every(key => obj[key] === first);
console.log(sameValue);

编辑:
如果您希望在至少两个属性具有相同值时返回true:
var obj = { a: "sample", b: "saxmple", c: "sample" };
var keys = Object.keys(obj);
var sameValue = keys.some((key, index) => keys.some((otherKey, otherIndex) => obj[key] === obj[otherKey] && index !== otherIndex));
console.log(sameValue);

答案 2 :(得分:-1)
从Underscore.js
尝试 _。每次every_.every(list,[predicate],[context])
如果列表中的所有值都通过谓词真值测试,则返回true。如果找到错误元素,则短路并停止遍历列表。
_。every([2,4,5],function(num){return num%2 == 0;}); =>假
在你的情况下你应该用“obj”中的所有下一个元素检查“obj”的第一个元素的值