Heim  >  Artikel  >  Web-Frontend  >  Lösen Sie das Problem, dass sich die Array-Sortierung in JavaScript nicht ändert

Lösen Sie das Problem, dass sich die Array-Sortierung in JavaScript nicht ändert

hzc
hzcnach vorne
2020-06-15 09:28:163444Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen