Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengoptimumkan Objek JavaScript Bersarang yang Meratakan dan Tidak Meratakan?

Bagaimanakah Saya Boleh Mengoptimumkan Objek JavaScript Bersarang yang Meratakan dan Tidak Meratakan?

Linda Hamilton
Lepaskan: 2024-12-29 08:30:11
asal
856 orang telah melayarinya

How Can I Optimize Flattening and Unflattening Nested JavaScript Objects?

Tidak Meratakan dan Meratakan Objek JavaScript Bersarang: Pelaksanaan Dioptimumkan

Tugas meratakan dan tidak meratakan objek JavaScript yang kompleks boleh memakan masa. Berikut ialah analisis komprehensif untuk mengoptimumkan operasi ini:

Cabarannya: Objek JavaScript perlu diratakan dengan "." sebagai pembatas untuk kekunci objek dan "[INDEX]" untuk tatasusunan.

Penyelesaian awal: Kod yang disediakan menyelesaikan masalah tetapi agak perlahan.

Pelaksanaan yang lebih pantas (menggunakan ungkapan biasa): Bergi memperkenalkan pelaksanaan yang jauh lebih pantas menggunakan ungkapan biasa. Ia menyahratakan objek dengan mengulangi sifat yang diratakan dan mencipta struktur bersarang dengan sewajarnya.

Pelaksanaan terpantas (bukan regex): Membina konsep Bergi, pelaksanaan yang disediakan menawarkan bukan regex terpantas versi. Ia menganggap peraturan khusus untuk nama utama, tidak termasuk integer pada permulaan atau noktah dalam nama.

Meningkatkan prestasi tidak rata: AaditMShah meningkatkan prestasi tidak rata dengan menggunakan penghuraian laluan sebaris dan bukannya String.split dalam gelung bersarang.

Kod akhir (tidak rata):

Object.unflatten = function(data) {
    "use strict";
    if (Object(data) !== data || Array.isArray(data))
        return data;
    var regex = /\.?([^.\[\]]+)|\[(\d+)\]/g,
        resultholder = {};
    for (var p in data) {
        var cur = resultholder,
            prop = "",
            m;
        while (m = regex.exec(p)) {
            cur = cur[prop] || (cur[prop] = (m[2] ? [] : {}));
            prop = m[2] || m[1];
        }
        cur[prop] = data[p];
    }
    return resultholder[""] || resultholder;
};
Salin selepas log masuk

Kod akhir (ratakan):

Object.flatten = function(data) {
    var result = {};
    function recurse (cur, prop) {
        if (Object(cur) !== cur) {
            result[prop] = cur;
        } else if (Array.isArray(cur)) {
             for(var i=0, l=cur.length; i<l; i++)
                 recurse(cur[i], prop + "[" + i + "]");
            if (l == 0)
                result[prop] = [];
        } else {
            var isEmpty = true;
            for (var p in cur) {
                isEmpty = false;
                recurse(cur[p], prop ? prop+"."+p : p);
            }
            if (isEmpty &amp;&amp; prop)
                result[prop] = {};
        }
    }
    recurse(data, "");
    return result;
};
Salin selepas log masuk

Pengoptimuman ini meningkatkan prestasi bersarang rata dan tidak rata Objek JavaScript sambil mematuhi keperluan keserasian Penyemak Imbas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Objek JavaScript Bersarang yang Meratakan dan Tidak Meratakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan