Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Menetapkan Nilai Secara Dinamik kepada Objek JavaScript Bersarang Dalam Menggunakan Hanya Nama Harta Rentetan?

Bagaimanakah Saya Boleh Menetapkan Nilai Secara Dinamik kepada Objek JavaScript Bersarang Dalam Menggunakan Hanya Nama Harta Rentetan?

Barbara Streisand
Barbara Streisandasal
2024-12-10 07:26:11385semak imbas

How Can I Dynamically Assign Values to Deeply Nested JavaScript Objects Using Only a String Property Name?

Penugasan Harta Dinamik dalam JavaScript

Dalam senario tertentu, anda mungkin menghadapi keperluan untuk menetapkan nilai kepada harta yang bersarang dalam dalam objek struktur. Walau bagaimanapun, anda mungkin hanya mempunyai nama sifat sebagai rentetan. Ini boleh menimbulkan cabaran, kerana mengakses secara langsung harta itu memerlukan merentasi keseluruhan hierarki objek.

Penyelesaian

Untuk menangani isu ini, kami boleh menggunakan assign() fungsi:

function assign(obj, prop, value) {
    if (typeof prop === "string")
        prop = prop.split(".");

    if (prop.length > 1) {
        var e = prop.shift();
        assign(obj[e] =
                 Object.prototype.toString.call(obj[e]) === "[object Object]"
                 ? obj[e]
                 : {},
               prop,
               value);
    } else
        obj[prop[0]] = value;
}

Penggunaan

Mari kita pertimbangkan contoh:

var obj = {};
var propName = "foo.bar.foobar";

assign(obj, propName, "Value");

Penjelasan

  1. Prop mula-mula ditukar menjadi tatasusunan menggunakan kaedah split("."), menghasilkan ["foo", "bar", "foobar"].
  2. Elemen pertama tatasusunan, foo, diperuntukkan kepada obj.
  3. The Object.prototype.toString.call(obj [e]) === "[objek Objek]" menyemak sama ada obj.foo ialah objek. Jika benar, kami menetapkan obj.foo kepada obj[e].
  4. Jika obj.foo bukan objek, kami mencipta objek baharu dan menetapkannya kepada obj.foo.
  5. Kami mengulangi proses untuk bar dan foobar, akhirnya menetapkan obj.foo.bar.foobar kepada nilai yang dihantar ke dalam assign() fungsi.

Dengan menggunakan fungsi assign(), anda boleh menetapkan nilai secara dinamik kepada sifat pada sebarang tahap kedalaman, walaupun anda hanya mempunyai nama sifat sebagai rentetan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Nilai Secara Dinamik kepada Objek JavaScript Bersarang Dalam Menggunakan Hanya Nama Harta Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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