2017-10-09 39 views
1

内部检查值的有效办法,我有一个JSON对象,例如AngularJS - 一个JSON元素

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

,我要检查每一个关键,如果他们有相同的价值观。

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

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

回答

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

+0

稍后会尝试这个答案,我会给你一个反馈。谢谢你回答我的问题。祝你有美好的一天! –

+0

我在代码中发现的问题是,如果键a和键b中的值相同,则会输出false。如果在两个或更多个键中具有相同的值,是否可以返回true? –

+0

我编辑了答案 – Faly

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性能运行,检查是否所有的人都是平等的,以第一一个 - 这意味着,它们是平等的。

+0

'i'永远不会被设置为任何超越'0',所以这段代码永远传承和报告说他们没有什么不同。 – GregL

+0

@GregL,代码已修复。在循环结束时忘记增加i。 – uksz

+0

@uksz对于条件语句的错误实现感到抱歉。我很急于输入我的问题,并没有注意到它。但这个想法仍然是一样的。谢谢回答。稍后将尝试您的答案,我会给您一个反馈。祝你有美好的一天! –

-1

从Underscore.js试试这个_.every

every_.every(列表,[谓语],[背景])

返回true如果列表中的所有值传递的谓词真相测验。如果发现错误元素,则短路并停止遍历列表。

_.every([2,4,5],function(num){return num%2 == 0;}); =>假

在乌拉圭回合的情况下

ü应在“目标文件”