正如標題所說,我想比較兩個js數組,其中我只關心內容是相同的,但我不在乎它們的順序是相同的。所以我期望的是這樣的:如何比較javascript數組的內容,但不是它們的順序?
[1, 2, 3, 3] == [1, 2, 3, 3] // True
[1, 2, 3, 3] == [1, 3, 2, 3] // True
[1, 2, 3, 3] == [1, 2] // False
[1, 2, 3, 3] == [1, 2, 3] // False
[1, 2, 3, 3] == [1, 2, 3, 3, 3] // False
[1, 2, 3, 3] == [1, "2, 3, 3"] // False
顯然,比較運算符不起作用。從this SO answer我得到了下面的Array.prototype方法,但不幸的是也檢查順序是否相同。
那麼有人知道我可以檢查兩個js數組是否包含相同的元素,而不考慮元素的順序?歡迎所有提示!比較之前
Array.prototype.equals = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;
// compare lengths - can save a lot of time
if (this.length != array.length)
return false;
for (var i = 0, l=this.length; i < l; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].equals(array[i]))
return false;
}
else if (this[i] != array[i]) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
你只能處理數字的數組或者是你尋找一個通用的解決方案?數組的近似大小是多少?我相信一個最佳的通用解決方案只能通過Map來實現。 –
您可以隨時排序並檢查它們是否相同。 –
另外,這個實現並不是那麼好。由於它使用寬鬆比較,它會返回誤報。例如。 '[[1,2]]'和'['1,2']'被這個算法認爲是相等的。 –