2017-10-09 37 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;}); =>假

在烏拉圭回合的情況下

ü應在「目標文件」