Was ist der schnellste/beste Weg, zwei Arrays zu vergleichen und den Unterschied zurückzugeben? Ähnlich wie array_diff
in PHP. Gibt es eine einfache Funktion oder muss ich eine über each()
erstellen? oder eine foreach
Schleife?Vergleiche 2 Arrays, die den Unterschied zurückgeben
Antwort
Arbeiten Demohttp://jsfiddle.net/u9xES/
Gute Link (JQuery Dokumentation): http://docs.jquery.com/Main_Page {Sie können APIs hier suchen oder lesen}
Hope this Ihnen helfen, wenn Sie es in JQuery zu tun suchen, um.
Die Warnung am Ende fordert das Array von ungewöhnlichen Element Array, d. H. Differenz zwischen 2 Array.
Bitte lemme wissen, wenn ich etwas verpasst habe, Prost!
-Code
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
Diese Methode ist cool, sollte aber den Fall berücksichtigen, wenn die Länge von Array2 kleiner ist als array1 –
Eleganter: einfach 'difference = $ .grep (a1, Funktion (x) {return $ .inArray (x, a2) <0}) ' –
Große Antwort. Ich möchte jedoch darauf hinweisen, dass Sie '.grep' wie '.each' verwenden; sollte sein: "difference = $ .grep (array2, funktion (el) {return $ .inArray (el, array1) == -1;})' – PeterKA
Array-Operationen wie diese sind nicht der stärkste Punkt von jQuery. Sie sollten eine Bibliothek wie Underscorejs, insbesondere die Differenzfunktion, in Betracht ziehen.
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;
};
Ich weiß, dass dies eine alte Frage, aber ich dachte, ich würde diesen kleinen Trick teilen.
var diff = $(old_array).not(new_array).get();
diff
enthält jetzt, was in old_array
war, die nicht in new_array
kurz und süß .. genau wie ich es mag .. ich benutzte das mit' $ .merge() ', um Unterschiede in einer bestimmten Reihenfolge zu verketten ... – kingkode
wird das funktionieren, wenn Das Array enthält Objekte? Ich versuche Objekte in zwei Arrays zu vergleichen – Batman
Hier ist ein Szenario. Das funktioniert gut für '$ (['h', 'h', 'h', 'h', 'h']). Nicht ($ ([" a "," a "," a "]))' aber für ein Array wie '$ (['h', 'h', 'h', 'h', 'h'])) nicht ($ ([" a "," a "," a "," h "]))' (ACHTUNG das letzte "h" im Array) gibt ein leeres Array zurück. Der Unterschied wird nicht zurückgegeben. Daher ist es fehlerhaft. –
ist, wenn Sie auch die Reihenfolge der Antwort auf vergleichen wollen, können Sie die Antwort auf so etwas wie dies erweitern:
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;
}
Auf diese Weise brauchen Sie sich keine Gedanken darüber zu machen, ob das erste Array kleiner als das zweite ist.
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));
Gebrauch unterstreichen, wie:
_.difference(array1,array2)
Dies bietet keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag. – AlSki
@AlSki gibt es die Antwort auf die gestellte Frage! vergleicht die beiden Arrays und gibt das Diff zurück. –
@ anurag_29 Die Frage war, wie man es mit jQuery macht, nicht unterstreichen. – 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;
}
Sie dann die Funktion überall in Ihrem Code aufrufen können.
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"!
Dies funktioniert in allen Fällen und vermeidet die Probleme in den oben genannten Methoden. Ich hoffe, das hilft!
Dies sollte mit unsortierten Arrays, doppelten Werten und verschiedenen Ordnungen und Länge funktionieren, während Sie die gefilterten Werte von Array1, Array2 oder beiden erhalten.
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 ]
Statt ganze Lodash des Ziehens können Sie diese leichte array-diff Open-Source-Komponente verwenden.
Beispiel:
diff([1,2,3], [1,2,3,4,5]) // => [4,5]
Es funktioniert durch concating die beiden Arrays geleitet und Filterung vals enthalten ist, eine Anordnung zurückkehrt, den Unterschied zwischen den beiden Anordnungen darstellen.
- 1. np.fromfunction: Vergleiche andere Arrays
- 2. Vergleiche Arrays von Objekten
- 3. Julia: boolesche Vergleiche mit Arrays
- 4. Funktionen, die Arrays zurückgeben
- 5. Finden Sie den Unterschied zwischen zwei Arrays
- 6. Den abschließenden Schrägstrich in ExpressionEngine 2 zurückgeben?
- 7. Eigenschaften sollten Arrays nicht zurückgeben
- 8. Sind generische Eigenschaften, die Arrays zurückgeben, akzeptabel?
- 9. Finding den Unterschied zwischen Arrays und aktualisieren
- 10. Unterschied zwischen zwei Arrays
- 11. PHP: Vergleiche zwei Arrays und sortiere nach Priorität
- 12. Zurückgeben eines Arrays in Specman
- 13. PHP-Funktion zwei Arrays zurückgeben
- 14. Wie finden Sie den Unterschied zwischen 2 Strings in PHP?
- 15. PHP: Merge 2 Arrays
- 16. Unterschied zwischen math.exp (2) und math.e ** 2
- 17. Select-Anweisung in "mit" leere Arrays zurückgeben
- 18. Warum verbietet ISO C++ das Zurückgeben von Arrays?
- 19. Funktion Zurückgeben eines Arrays in Fortran
- 20. Die Indizes eines Sub-Arrays in einem Array zurückgeben
- 21. Merge diesen 2-Arrays
- 22. Objective-C - Wie vergleicht man Arrays und extrahiert den Unterschied?
- 23. Vergleich 2 numpy Arrays
- 24. Leistung von 2-dimensionalen Arrays vs 1-dimensionalen Arrays
- 25. Test 2 Boolesche Arrays
- 26. Kombiniere 2 PHP-Arrays?
- 27. C# String-Vergleiche: Unterschied zwischen CurrentCultureIgnoreCase und InvariantCultureIgnoreCase
- 28. Mehrere Arrays mit unterschiedlichen Werten zurückgeben
- 29. Zurückgeben eines veränderbaren Arrays aus einer Funktion
- 30. Bitte erklären Sie den Unterschied
Hiya Mann, ich schätze, Sie können 'inArray' verwenden und den Unterschied zwischen 2 Arrays bevölkern; Ich habe eine funktionierende Demo für Sie eingefügt, hoffe es hilft B-) –
Duplikat von http://stackoverflow.com/questions/1187518/javascript-array-difference (auch wenn es schon woanders irgendwo drin verlinkt wurde) – cregox
Sie wahrscheinlich wollen [diese Antwort aus einer früheren SO-Frage] (http://stackoverflow.com/a/4026828/304588). Es baut auf dem Array-Prototyp auf. –