Heim > Artikel > Web-Frontend > Lösen Sie das Problem, dass sich die Array-Sortierung in JavaScript nicht ändert
Ich habe kürzlich an einem Projekt gearbeitet, nachdem Ajax Daten aus dem Hintergrund zurückgegeben hatte, als das Frontend mit js verarbeitet wurde Wenn sort verwendet wurde, änderte sich am Ende nichts, oder ich änderte nur die letzte Sortierung. Nachdem ich lange gekämpft hatte, stellte ich schließlich fest, dass es in js einen Unterschied zwischen flacher Kopie und tiefer Kopie gibt.
var provinceConfirmedCount = data; var provinceDeadCount = data; var provinceCuredCount = data; provinceConfirmedCount.sort(sortBy(("provinceConfirmedCount"))); provinceDeadCount.sort(sortBy(("provinceDeadCount"))); provinceCuredCount.sort(sortBy(("provinceCuredCount"))); console.log(provinceConfirmedCount); //不生效 console.log(provinceDeadCount); //不生效 console.log(provinceCuredCount); //生效 //比较数组对象 function sortBy(field) { return function(a,b) { return parseInt(b[field]) - parseInt(a[field]); } }
Flache Kopie, tiefe Kopie und Zuweisung
Der Unterschied zwischen diesen drei besteht der Einfachheit halber darin, wie die Daten geändert werden. Klar Verwenden Sie eine Tabelle, um am schnellsten zu verstehen:
|
Ob es auf dasselbe Objekt zeigt |
Die erste Ebene ist der Basisdatentyp |
Die Originaldaten enthalten Unterobjekte | Zuweisung | Ja | ändert die Originaldaten gemeinsam | führt dazu, dass sich die Originaldaten gemeinsam ändern | ||||||||||||||||
Flache Kopie | Nein | Die Originaldaten werden nicht geändert | ändert die Originaldaten | ||||||||||||||||||||
Deep copy | Ja | ändert die Originaldaten nicht | Die Originaldaten werden nicht gleichzeitig geändert |
Lösung
Nachdem Sie nun das Prinzip kennen, sehen Sie hier: Die Anforderung erfordert alle Änderungen, sodass wir die Extend-Methode in JQuery verwenden können, um damit umzugehen:
var provinceConfirmedCount = $.extend([], data); var provinceDeadCount = $.extend([], data);; var provinceCuredCount = $.extend([], data);; provinceConfirmedCount.sort(sortBy(("provinceConfirmedCount"))); provinceDeadCount.sort(sortBy(("provinceDeadCount"))); provinceCuredCount.sort(sortBy(("provinceCuredCount"))); console.log(provinceConfirmedCount); console.log(provinceDeadCount); console.log(provinceCuredCount);Syntax: $.extend( target, [object1], [objectN] ) Wobei Ziel der Zieltyp ist, hier I Das Array [] wird verwendet, und es kann auch {} sein, was entsprechend der tatsächlichen Situation verarbeitet werden kann. Aus dem folgenden [object1], [objectN] können wir erkennen, dass „extend“ mehrere zu verarbeitende Objekte zu einem Objekt des Zieltyps zusammenführen kann. Empfohlenes Tutorial: „JS-Tutorial“
Das obige ist der detaillierte Inhalt vonLösen Sie das Problem, dass sich die Array-Sortierung in JavaScript nicht ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!