AngularJS - 检查 json 元素内值的有效方法

AngularJS - Efficient way of checking values inside a json element

我有一个 json 对象示例

var obj = { a: "sample", b: "sample", c: "sample" };

我想检查每个键是否具有相同的值。

if(a === b || b === c || c === a){ 
  console.log("Error");
}

是否有更好的方法来检查这些值?任何想法都会有所帮助。谢谢!

您发布的代码将永远不会打印 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 属性,检查它们是否都等于第一个 - 这意味着它们是否相等。

试试 _.every 来自 Underscore.js

每个_.every(列表,[谓词],[上下文])

Returns 如果列表中的所有值都通过谓词真值测试,则为真。如果发现错误元素,则短路并停止遍历列表。

_.every([2, 4, 5], 函数(num) { return num % 2 == 0; }); => 错误

在你的情况下,你应该检查 "obj" 的第一个元素的值和 "obj"

中的所有下一个元素

您可以使用 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);

编辑:

如果您想要 return 如果至少有两个属性具有相同的值则为真:

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