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
Barbara Streisandoriginal
2024-12-10 07:26:11385parcourir

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;
}

Utilisation

Considérons un exemple :

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

assign(obj, propName, "Value");

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!

Déclaration:
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