我有兩個未知的數組,我想知道,如果他們是平等的,不管他們的元素的位置,例如:比較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
我應該先解決它,然後比較?或者,還有更好的方法?
我有兩個未知的數組,我想知道,如果他們是平等的,不管他們的元素的位置,例如:比較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
我應該先解決它,然後比較?或者,還有更好的方法?
你可以試試這樣:
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;
};
var areEqual = $(A).not(B).length == 0 && $(B).not(A).length == 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;
}
我不完全肯定此代碼將實際工作(我沒有測試過)。
您可以排序和字符串化和比較,檢查數組是否相等:
即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] == [11]。 – Teepeemm
@Teepeemm - 確實。感謝那。編輯。 – techfoobar
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;
}
歡迎來到SO。通常最好有一些非代碼解釋與你寫的內容一致。但在這種情況下,還有三個其他答案也符合「先排序,然後比較」的要求,所以我不知道您是否在問題中添加了任何內容。 (你需要一個自定義的排序函數嗎?) – Teepeemm
如何檢查數組長度然後排序和比較的順序。當然自定義排序功能不是必需的 – lnarasimhan
這是一個好點。 – Teepeemm
這將返回false對於第一種情況,其中OP預期真正。元素的位置應該被忽略。 –
這隻適用於排序的數組。 – Fyre
@DarinDimitrov: - 更新了我的答案。謝謝你的觀點! –