Heim >Backend-Entwicklung >PHP-Tutorial >javascript - Sortiert JSON.parse() das zurückgegebene Array nach Schlüsselwert? So stellen Sie sicher, dass es nicht sortiert wird

javascript - Sortiert JSON.parse() das zurückgegebene Array nach Schlüsselwert? So stellen Sie sicher, dass es nicht sortiert wird

WBOY
WBOYOriginal
2016-08-25 10:37:303813Durchsuche

Ich serialisiere ein sortiertes Array im Hintergrund und übergebe es an die Rezeption. Bei der Übertragung sortiert die Rezeption die Ergebnisse automatisch nach dem Schlüsselwert Als nächstes muss man es unsortieren lassen. Bitte geben Sie mir weitere Ratschläge

javascript - Sortiert JSON.parse() das zurückgegebene Array nach Schlüsselwert? So stellen Sie sicher, dass es nicht sortiert wird
Das Obige ist die richtige Reihenfolge, und das Folgende ist die Reihenfolge nach json.parse() Vielleicht habe ich es nicht gut ausgedrückt

Antwortinhalt:

Ich serialisiere ein sortiertes Array im Hintergrund und übergebe es an die Rezeption. Bei der Übertragung sortiert die Rezeption die Ergebnisse automatisch nach dem Schlüsselwert Als nächstes muss man es unsortieren lassen. Bitte geben Sie mir weitere Ratschläge

javascript - Sortiert JSON.parse() das zurückgegebene Array nach Schlüsselwert? So stellen Sie sicher, dass es nicht sortiert wird
Das Obige ist die richtige Reihenfolge, und das Folgende ist die Reihenfolge nach json.parse() Vielleicht habe ich es nicht gut ausgedrückt

JSON.parse generiert Objekte und die Schlüssel der Objekte sind in keiner Reihenfolge.

JavaScript-Objekte sind tatsächlich ungeordnet und scheinen aufgrund von HASH und anderen Gründen nach Schlüsselwert sortiert zu sein.

Wenn Sie ein geordnetes Array zurückgeben, sollte es nicht außer Betrieb sein. Wenn es nicht in Ordnung ist, geben Sie höchstwahrscheinlich ein Schlüssel-Wert-Paar-Objekt zurück. Geben Sie einen Testcode.

<code class="javascript">// 随机生成 data
let data = [];
for (var i = 0; i < 10; i++) {
    let textOrder = ~~(Math.random() * 10000).toString();
    textOrder = `000${textOrder}`;
    textOrder = textOrder.substr(textOrder.length - 4);

    data.push({
        key: ~~(Math.random() * 1000),
        text: `text${textOrder}`
    });
}

// 按 text 排序
data.sort((a, b) => {
    let ta = a.text;
    let tb = b.text;
    return ta < tb ? -1 : (ta > tb ? 1 : 0);
});

// 生成 JSON
var json = JSON.stringify(data);
console.log(json);

// parse
console.log(JSON.parse(json));</code>

Ergänzung

Ich kenne mich mit PHP nicht aus, ich sollte es wahrscheinlich so handhaben

<code class="php">$data = array(20=>'a',10=>'b');
echo json_encode($data);
// {"20":"a","10":"b"}
// 上面是原来的输出结果

$list = [];
foreach ($data as $k => $v) {
    array_push($list, array("key" => $k, "value" => $v));
}
echo json_encode($list);
[{"key":20,"value":"a"},{"key":10,"value":"b"}]</code>

Der auf diese Weise erhaltene JSON wird in ein Array analysiert, das der ursprünglichen Reihenfolge entspricht.

JSON.parse führt nicht dazu, dass die Sequenz durcheinander gebracht wird. Ich vermute, dass Sie {key1: value1, key2: value2} geschrieben haben, was eine JSON-Struktur ist, die Map ähnelt So etwas, also verwenden Sie Object.keys (). Dies führt zu der von Ihnen erwähnten Störung. Es wird empfohlen, eine Struktur wie [{key: value}, {key: value}, {key: value}] zurückzugeben, die direkt durchlaufen werden kann.

JSON.parse Mein Eindruck ist, die Zeichenfolge „{}“ in ein Objekt umzuwandeln

Die Reihenfolge der Verwendung von JSON.parse im Frontend des Arrays sollte sich nicht ändern, oder?

Wenn das Poster für ... oder ... an der Rezeption verwendet werden soll, gibt es meines Erachtens keine Möglichkeit, dies zu tun

Stellen Sie es einfach selbst zufällig zusammen

Konvertieren Sie den Schlüsselwert in eine Zeichenfolge und er wird nicht sortiert.

Referenz: http://php.net/manual/zh/func...
Konzentrieren Sie sich auf die Optionskonstanten

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn