Cách nhanh nhất/tốt nhất để so sánh hai mảng và trả về sự khác biệt là gì? Giống như array_diff
trong PHP. Có một chức năng dễ dàng hay tôi sẽ phải tạo một chức năng qua each()
? hoặc một vòng lặp foreach
?So sánh 2 mảng trả về sự khác biệt
Trả lời
Làm việc bản demohttp://jsfiddle.net/u9xES/
Tốt liên kết (Jquery Documentation): http://docs.jquery.com/Main_Page {bạn có thể tìm kiếm hoặc đọc API here}
Hy vọng điều này sẽ giúp bạn nếu bạn đang tìm kiếm để làm điều đó trong JQuery.
Cảnh báo cuối cùng sẽ nhắc mảng phần tử không phổ biến Array tức là sự khác biệt giữa 2 mảng.
Xin vui lòng cho tôi biết nếu tôi bỏ lỡ bất cứ điều gì, chúc mừng!
Mã
var array1 = [1, 2, 3, 4, 5, 6];
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var difference = [];
jQuery.grep(array2, function(el) {
if (jQuery.inArray(el, array1) == -1) difference.push(el);
});
alert(" the difference is " + difference); // Changed variable name
Phương pháp này rất tuyệt, nhưng nên xem xét trường hợp nếu độ dài của mảng2 nhỏ hơn array1 –
Thanh lịch hơn: đơn giản là 'khác biệt = $ .grep (a1, hàm (x) {return $ .inArray (x, a2) <0}) ' –
Câu trả lời hay. Tuy nhiên, bạn muốn chỉ ra rằng bạn đang sử dụng '.grep' như' .each'; nên là 'khác biệt = $ .grep (mảng2, hàm (el) {return $ .inArray (el, mảng1) == -1;})' – PeterKA
Các hoạt động mảng như thế này không phải là điểm mạnh nhất của jQuery. Bạn nên xem xét một thư viện như Underscorejs, đặc biệt là chức năng khác biệt.
var arrayDiff = function (firstArr, secondArr) {
var i, o = [], fLen = firstArr.length, sLen = secondArr.length, len;
if (fLen > sLen) {
len = sLen;
} else if (fLen < sLen) {
len = fLen;
} else {
len = sLen;
}
for (i=0; i < len; i++) {
if (firstArr[i] !== secondArr[i]) {
o.push({idx: i, elem1: firstArr[i], elem2: secondArr[i]}); //idx: array index
}
}
if (fLen > sLen) { // first > second
for (i=sLen; i< fLen; i++) {
o.push({idx: i, 0: firstArr[i], 1: undefined});
}
} else if (fLen < sLen) {
for (i=fLen; i< sLen; i++) {
o.push({idx: i, 0: undefined, 1: secondArr[i]});
}
}
return o;
};
Tôi biết đây là một câu hỏi cũ, nhưng tôi nghĩ tôi sẽ chia sẻ mẹo nhỏ này.
var diff = $(old_array).not(new_array).get();
diff
bây giờ chứa những gì đã ở old_array
đó không phải là trong new_array
ngắn và ngọt .. giống như tôi thích nó .. tôi đã sử dụng nó với '$ .merge()' để nối các khác biệt theo thứ tự cụ thể ... – kingkode
sẽ hoạt động nếu mảng chứa các đối tượng? Tôi đang cố gắng so sánh các đối tượng trong hai mảng – Batman
Đây là một kịch bản. Điều này làm việc tốt cho '$ (['h', 'h', 'h', 'h', 'h']). Không ($ ([" a "," a "," a "]))' nhưng đối với một mảng như '$ (['h', 'h', 'h', 'h', 'h']) chứ không phải ($ ([" a "," a "," a "," h "]))' (CHÚ Ý "h" cuối cùng trong mảng) nó trả về một mảng trống. Sự khác biệt không được trả lại. Do đó, nó bị lỗi. –
nếu bạn cũng muốn so sánh trình tự của câu trả lời, bạn có thể mở rộng câu trả lời cho một cái gì đó như thế này:
Array.prototype.compareTo = function (array2){
var array1 = this;
var difference = [];
$.grep(array2, function(el) {
if ($.inArray(el, array1) == -1) difference.push(el);
});
if(difference.length === 0){
var $i = 0;
while($i < array1.length){
if(array1[$i] !== array2[$i]){
return false;
}
$i++;
}
return true;
}
return false;
}
Bằng cách này bạn không cần phải lo lắng về việc nếu mảng đầu tiên nhỏ hơn mảng thứ hai.
var arr1 = [1, 2, 3, 4, 5, 6,10],
arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
function array_diff(array1, array2){
var difference = $.grep(array1, function(el) { return $.inArray(el,array2) < 0});
return difference.concat($.grep(array2, function(el) { return $.inArray(el,array1) < 0}));;
}
console.log(array_diff(arr1, arr2));
sử dụng nhấn mạnh như:
_.difference(array1,array2)
Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. – AlSki
@AlSki nó đưa ra câu trả lời cho câu hỏi được hỏi! so sánh hai mảng và trả về diff. –
@ anurag_29 Câu hỏi là làm thế nào để làm điều đó với jQuery, không gạch dưới. – reergymerej
/** SUBTRACT ARRAYS **/
function subtractarrays(array1, array2){
var difference = [];
for(var i = 0; i < array1.length; i++) {
if($.inArray(array1[i], array2) == -1) {
difference.push(array1[i]);
}
}
return difference;
}
Sau đó, bạn có thể gọi hàm bất cứ nơi nào trong mã của bạn.
var I_like = ["love", "sex", "food"];
var she_likes = ["love", "food"];
alert("what I like and she does't like is: " + subtractarrays(I_like, she_likes)); //returns "Naughty"!
Điều này hoạt động trong mọi trường hợp và tránh các sự cố trong các phương pháp nêu trên. Hy vọng rằng sẽ giúp!
Điều này sẽ hoạt động với các mảng chưa được phân loại, giá trị kép và các đơn đặt hàng và độ dài khác nhau, trong khi cung cấp cho bạn các giá trị được lọc dạng array1, array2 hoặc cả hai.
function arrayDiff(arr1, arr2) {
var diff = {};
diff.arr1 = arr1.filter(function(value) {
if (arr2.indexOf(value) === -1) {
return value;
}
});
diff.arr2 = arr2.filter(function(value) {
if (arr1.indexOf(value) === -1) {
return value;
}
});
diff.concat = diff.arr1.concat(diff.arr2);
return diff;
};
var firstArray = [1,2,3,4];
var secondArray = [4,6,1,4];
console.log(arrayDiff(firstArray, secondArray));
console.log(arrayDiff(firstArray, secondArray).arr1);
// => [ 2, 3 ]
console.log(arrayDiff(firstArray, secondArray).concat);
// => [ 2, 3, 6 ]
Thay vì kéo toàn bộ Lodash bạn có thể sử dụng thành phần nguồn mở nhẹ array-diff.
Ví dụ:
diff([1,2,3], [1,2,3,4,5]) // => [4,5]
Nó hoạt động bằng cách concating hai mảng trôi qua và lọc bao gồm Vals, trả lại một mảng đại diện cho phần chênh lệch giữa hai mảng.
- 1. Trả về mảng so sánh chiến lược
- 2. So sánh hai danh sách và trả lại giá trị khác biệt và sự khác biệt
- 3. Tại sao smartmatch trả về true khi so sánh các mảng mảng khác nhau?
- 4. So sánh NSNumber: trả về các kết quả khác nhau
- 5. So sánh hai mảng trong Javascript - Trở khác biệt
- 6. So sánh các phân đoạn XML và các khác biệt trả về
- 7. So sánh hình ảnh để tìm sự khác biệt
- 8. So sánh hai chuỗi và nhận được sự khác biệt
- 9. Sự khác biệt giữa lỗi mã trả về và lỗi
- 10. Cách so sánh 2 mục tiêu Xcode
- 11. Jasmine.js so sánh mảng
- 12. Sự khác biệt về PHP giữa mảng() và []
- 13. Sự khác biệt về chức năng mysqli_fetch
- 14. Performance khác biệt khi so sánh số nguyên và so sánh chuỗi
- 15. Loại trả về từ một Công cụ so sánh
- 16. So sánh hai Danh sách cho các khác biệt
- 17. So sánh hai NSArrays và trả lại số chênh lệch
- 18. chuỗi so sánh trong javascript trả về một boolean
- 19. sự khác biệt giữa các loại khác nhau của so sánh trong TFS
- 20. SQL - Sự khác biệt giữa SPACE (2) + '|' + SPACE (2) và ‘| ‘?
- 21. PHP so sánh hai mảng và nhận được các giá trị phù hợp không khác biệt
- 22. sự khác biệt giữa hai mảng
- 23. Java so sánh Mảng
- 24. So sánh hai mảng
- 25. So sánh NaN và trả về rỗng illogic giá trị
- 26. Bảng Lua Phân loại 2 so sánh
- 27. Cách Pythonic để so sánh hai danh sách và in ra sự khác biệt
- 28. MOM so với SOA? Sự khác biệt?
- 29. nhận được sự khác biệt trong 2 DataSets C#
- 30. Sự khác nhau về chuỗi so sánh giữa .NET và T-SQL?
Hiya người đàn ông, tôi nghĩ bạn có thể sử dụng 'inArray' và cư trú sự khác biệt giữa 2 mảng; Tôi đã dán một bản demo làm việc cho bạn, hy vọng nó sẽ giúp B-) –
trùng lặp của http://stackoverflow.com/questions/1187518/javascript-array-difference (ngay cả khi nó đã được liên kết ở nơi khác trong đó, một nơi nào đó) – cregox
Bạn có lẽ muốn [câu trả lời này từ một câu hỏi SO quá khứ] (http://stackoverflow.com/a/4026828/304588). Nó được xây dựng trên nguyên mẫu Array. –