Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Meratakan dan Menyahratakan Objek JavaScript dengan Cekap?

Bagaimanakah Saya Boleh Meratakan dan Menyahratakan Objek JavaScript dengan Cekap?

Linda Hamilton
Lepaskan: 2024-12-19 00:35:10
asal
185 orang telah melayarinya

How Can I Efficiently Flatten and Unflatten JavaScript Objects?

Meratakan dan Menyahratakan Objek JavaScript dengan Pantas dan Cekap

Meratakan dan tidak meratakan objek JavaScript bersarang ialah tugas biasa dalam pembangunan web, tetapi ia boleh menjadi intensif pengiraan. Artikel ini meneroka pelaksanaan yang cekap untuk kedua-dua operasi merata dan tidak merata.

Meratakan Objek

Kod berikut menyediakan pelaksanaan merata yang sangat dioptimumkan:

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 ? prop+"."+i : 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

Tidak rata Objek

Untuk tidak merata, pelaksanaan berikut menunjukkan prestasi yang dipertingkatkan:

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

Hasil Penanda Aras

Pelaksanaan ini meningkatkan prestasi dengan ketara dalam meratakan dan operasi tidak rata. Dalam Opera 12.16, meratakan adalah kira-kira dua kali lebih pantas (~900ms berbanding ~1900ms), manakala dalam Chrome 29, ia bertambah baik pada kadar yang sama (~800ms dan bukannya ~1600ms).

Awas :

Perhatikan bahawa pelaksanaan ini, memfokuskan pada kelajuan, terdedah kepada pencemaran prototaip. Oleh itu, adalah penting untuk mengelak daripada menggunakannya pada objek yang tidak dipercayai.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meratakan dan Menyahratakan Objek JavaScript dengan Cekap?. 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