J'ai construit un système javascript qui a quelques options. Le système extrait les informations de JSON. Basé sur l'option Je veux déclencher une partie spécifique de l'objet tableau et je ne veux pas avoir à utiliser eval ()

Habituellement, je ferais ça comme ça.

$.each(data.data, function () {
    console.log(this.images.small_image.src);
}

Maintenant, cela fonctionne bien jusqu'à ce que je veuille utiliser une variable pour le faire, la variable remplacerait la partie "small_image" et peut être n'importe quoi de "large_image", "scaled_image" et ainsi de suite.

Alors ce que je veux faire

var image_variable = 'small_image';
$.each(data.data, function () {
    console.log(this.images. + image_variable + .src);
}

Je ne sais pas si c'est possible, mais en espérant que quelqu'un ait des idées à ce sujet?

1
Dannymh 8 mars 2016 à 16:18

3 réponses

Meilleure réponse

Je ne sais pas si c'est même une question valable, étant donné que ce sont vraiment les bases de JavaScript, mais c'est parti.

Vous pouvez lire une valeur d'objet en passant la clé entre crochets [ 'key' ].

var image_variable = 'small_image';

$.each( data.data, function( ) {
    console.log( this.images[ image_variable ].src );
} );

Vous devriez probablement vous assurer que la clé est d'abord définie, avec instanceof Object ou plus. Cela évitera les erreurs dans votre script et vous permettra d'étendre votre propre gestionnaire d'erreurs pour expliquer ce qui ne va pas à l'utilisateur.

if ( this.images[ image_variable ] instanceof Object ) { }
1
ascx 8 mars 2016 à 13:28

Utilisez string.replace. https://developer.mozilla.org/en -US / docs / Web / JavaScript / Reference / Global_Objects / String / replace

var image_variable = 'small_image';
$.each(data.data, function () {
    console.log(this.images.src.replace(large_image, image_variable)); //something like that
}
0
Max Sorin 8 mars 2016 à 13:21

En JavaScript, vous pouvez accéder aux propriétés des objets via des chaînes. Cela étant dit, cela ferait exactement la même chose:

this.images.small_image.src;
this[images.small_image].src;
0
Aer0 8 mars 2016 à 13:22