Maison > interface Web > js tutoriel > Comment puis-je attribuer dynamiquement des valeurs à des objets JavaScript profondément imbriqués en utilisant uniquement un nom de propriété de chaîne ?

Comment puis-je attribuer dynamiquement des valeurs à des objets JavaScript profondément imbriqués en utilisant uniquement un nom de propriété de chaîne ?

Barbara Streisand
Libérer: 2024-12-10 07:26:11
original
410 Les gens l'ont consulté

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

Affectation dynamique de propriétés en JavaScript

Dans certains scénarios, vous pouvez rencontrer le besoin d'attribuer une valeur à une propriété profondément imbriquée dans un objet structure. Cependant, vous ne pouvez utiliser le nom de la propriété que sous forme de chaîne. Cela peut poser un défi, car accéder directement à la propriété nécessiterait de parcourir toute la hiérarchie des objets.

Solution

Pour résoudre ce problème, nous pouvons utiliser assign() fonction :

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;
}
Copier après la connexion

Utilisation

Considérons un exemple :

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

assign(obj, propName, "Value");
Copier après la connexion

Explication

  1. Le prop est d'abord converti en tableau à l'aide de la méthode split("."), ce qui donne ["foo ", "bar", "foobar"].
  2. Le premier élément du tableau, foo, est affecté à obj.
  3. Le Object.prototype.toString.call(obj[e]) === La condition "[object Object]" vérifie si obj.foo est un objet. Si c'est vrai, nous attribuons obj.foo à obj[e].
  4. Si obj.foo n'est pas un objet, nous créons un nouvel objet et l'attribuons à obj.foo.
  5. Nous répétons le processus pour bar et foobar, définissant finalement obj.foo.bar.foobar à la valeur transmise dans la fonction assign().

En utilisant la fonction assign(), vous pouvez attribuer dynamiquement des valeurs aux propriétés à n'importe quel niveau de profondeur, même si vous n'avez que le nom de la propriété sous forme de chaîne.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal