2014-07-26 37 views
-1

我有兩個未知的數組,我想知道,如果他們是平等的,不管他們的元素的位置,例如:比較2陣列具有不同的價值立場

A = [1,3,7] 
B = [3,7,1] 
-> return true 

A = [1,3] 
B = [1,3,7] 
-> return false 

A = [1,3,7] 
B = [1,4] 
-> return false 

我應該先解決它,然後比較?或者,還有更好的方法?

回答

0

你可以試試這樣:

function checkTwoArray(arr, brr) { 
    var a = arr.sort(); 
    var b= brr.sort(); 
    var i = a.length; 
    if (i != b.length) return false; 
    while (i--) { 
     if (a[i] !== b[i]) return false; 
    } 
    return true; 
}; 
+1

這將返回false對於第一種情況,其中OP預期真正。元素的位置應該被忽略。 –

+0

這隻適用於排序的數組。 – Fyre

+1

@DarinDimitrov: - 更新了我的答案。謝謝你的觀點! –

1
var areEqual = $(A).not(B).length == 0 && $(B).not(A).length == 0; 
0

有2個解決方案,其中一個比另一個更好。

正如你所建議的那樣,首先對數組進行排序,然後對它們進行比較。 (我也會建議這個)

第二種方法是遍歷一個數組,比較第二個數組中的每個元素,並保存(和跳過)找到這些值的索引。 然而,最後的解決方案是有點慢,太複雜的第二

代碼示例:

function compare(a, b) 
{ 
    if(a.length != b.length) { return false; } 
    var c = []; 
    for(i=0;i<a.length;i++) 
    { 
     var f = false;//current value found in second array 
     for(j=0;j<b.length;b++) 
     { 
      if(j in c) { continue; }//array c contains value j, so at this index, a value from 'a' is found in 'b' (maybe some other code should be used here, like indexOf() or jQuery.inArray()) 
      if(a[i] == b[j]) { c.push(j); f = true; } 
     } 
     if(!f) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

我不完全肯定此代碼將實際工作(我沒有測試過)。

0

您可以排序和字符串化和比較,檢查數組是否相等:

A.sort().join(',') === B.sort().join(',')


var A = [1,3,7]; 
var B = [3,7,1]; 
console.log("Equal: " + (A.sort().join(',') === B.sort().join(',')); 
+1

我想你想要一個分隔符。否則,[1,1] == [11]。 – Teepeemm

+0

@Teepeemm - 確實。感謝那。編輯。 – techfoobar

0
function compareArray(a, b) { 
    if (a.length != b.length) return false; 
    a.sort(); 
    b.sort(); 
    for (var i=0; i<b.length; i++){ 
      if (a[i] != b[i]) return false; 
    } 
    return true; 
} 
+0

歡迎來到SO。通常最好有一些非代碼解釋與你寫的內容一致。但在這種情況下,還有三個其他答案也符合「先排序,然後比較」的要求,所以我不知道您是否在問題中添加了任何內容。 (你需要一個自定義的排序函數嗎?) – Teepeemm

+0

如何檢查數組長度然後排序和比較的順序。當然自定義排序功能不是必需的 – lnarasimhan

+0

這是一個好點。 – Teepeemm