2015-08-20 157 views
1

我有一個對象數組,全部使用相同的鍵。我想檢查2個鍵,在這種情況下,所有OBJECTS中的「a」&「b」是否具有相同的值。含義a === a和b === b,橫跨所有對象。對象循環數組,比較鍵值

var arr = [{a:"x", b:2, c:3, d:4},{a:1, b:2, c:3, d:4},{a:1, b:2, c:3, d:4},{a:1, b:2, c:3, d:4}]; 

如果其中一個鍵值(a或b)與其他值不匹配,我想返回false。這種情況應該返回false,因爲arr [0] =「x」中的「a」,而其他所有其他值等於1;

這是我的嘗試。顯然不工作,但我試圖讓2個循環一次比較2個對象。例如,第一個循環將從arr [0]開始,第二個循環將從arr [1]開始,然後比較arr [3]與arr [4]之間的比較,依此類推。儘管陣列的長度不會總是平坦的。

function compareKeyVals(arr){ 

    for(var i = 0; i<arr.length; i+=2){ 
    for(var j = 1; j<arr.length; j+=2){ 
    for(key in arr[i]){  
     for(keyz in arr[j]){  
      if(key === "a" && keyz === "a"){ 
      if(arr[i][key] != arr[j][keyz]){ 
       return false; 
      } 
      } 
     } 
     }  
    } 
    } 
} 

compareKeyVals(arr); 

謝謝。

回答

1

由於它們必須相同,因此您可以檢查第一個對象的ab屬性,並將其與所有其他對象進行比較。像這樣:

for(var i=1; i<arr.length; i++){ 
    if(arr[i].a !== arr[0].a || arr[i].b !== arr[0].b) { 
    return false; 
    } 
} 
return true; 

更新:改到嚴格比較,靈感來自於馬克的回答

+0

注意,如果在'arr' – user1102901

+0

真沒對象,這將返回true,這也將導致一個錯誤,如果有數組中只有一個元素是。但在這兩種情況下,整個檢查無論如何都毫無意義。但是,真正的實現當然也應該能夠處理邊緣案例。 –

+0

那麼如果只有一個元素,它不會進入for循環,並返回true – user1102901

1
var flag = true; 
for(var i = 1; i<arr.length; i++){ 
if(arr[0].a != arr[i].a || arr[0].b != arr[i].b){ 
flag = false; 
break; 
} 
} 
return flag; 
+0

既然這兩個if語句都做同樣的事情,你可以合併它們。此外,只要有錯誤,您可以打破並返回錯誤。看看例子 – user1102901

+0

完成的其他答案。我已經包括休息。 –

1

你真的可以只檢測從一個迭代變化到下一個,對不對?

var arrayLength = arr.length; //cache the array length 
if (arrayLength > 0) { //only proceed if there are some elements 
    var firstA = arr[0].a; //set the baseline that all others must match 
    var firstB = arr[0].b; 
    for(var i = 1; i<arrayLength ; i++) { 
     //if the new one doesn't match the first one, break out 
     if (firstA !== arr[i].a || firstB !== arr[i].b) { 
      return false; 
     } 
    } 
    return true; //return true if we complete the loop with all matches 
} else { 
    return false; //assumes you want to return false if no elements in array 
} 

這將打破你跳出循環立即當它找到一個匹配,這樣你就不會浪費迭代。

(增加了檢查每評論空數組)

+0

小心,如果'arr'沒有元素,這將失敗。 – user1102901