2012-08-23 2 views
0

Dans l'exemple ci-dessous, existe-t-il un moyen de définir une ou plusieurs clés d'objet, par exemple "value", sur une variable? Je voudrais faire cela tout en gardant l'objet JOSN intact.Définition des clés d'objets variables

var ex = { 
    "value": 4, 
    "amount": 1341, 
    "data": "tree", 
    "animal": "mouse" 
} 

Je sais qu'il est possible de le faire.

var value = "value"; 
var ex = {}; 
ex[value] = 4; 
ex.amount = 1341; 
ex.data = "tree"; 
ex.animal = "mouse"; 

Ceci est en train de déchirer tout l'objet en morceaux et est beaucoup plus difficile à gérer.

+0

Quel est l'objectif? – xdazz

+0

Écriture d'opérations CRUD mongodb. La mise à jour est très fastidieuse. – ThomasReggi

Répondre

3

Non, ce n'est pas possible. Vous devez faire de la deuxième façon, ou un mélange des deux:

var ex = { 
    "amount": 1341, 
    "data": "tree", 
    "animal": "mouse" 
}; 

ex[value] = 4; 
0

Il est moyen facile ....

var ex = { 
    "value": 4, 
    "amount": 1341, 
    "data": "tree", 
    "animal": "mouse" 
} 

var valList = [['4','1341','tree','mouse'],['5','1341','tree','mouse']]; 
var objList=[]; 
for (var i =0; i<valList.length; i++) 
{ 
    j=0; 
    for(var o in ex) 
    { 
    ex[o] = valList[i][j]; 
     j++; 
    } 
     objList[i]= ex; 
} 

Il permettra de faire l'objet tas

+0

Qu'est-ce que cela signifie? – Ryan

+0

C'est le moyen facile de définir toutes les propriétés énumérées à «votre valeur», mais je ne pense pas que cela aidera l'OP. – alex

+0

@alex Je suis d'accord, merci pour la suggestion si – ThomasReggi

0

Si vous essayez simplement d'enregistrer une syntaxe ou si vous avez un peu plus de liberté sur les objets initiaux en utilisant des noms de propriétés dans une variable, vous pouvez créer une fonction qui prendra un nombre variable d'arguments et interpréter chaque paire d'arguments comme une clé et la valeur:

function setProps(obj, key, value /* key2, value2, etc... */) { 
    for (var i = 1; i < arguments.length; i+=2){ 
     obj[arguments[i]] = arguments[i+1]; 
    } 
} 

var ex = {}; 
setProps(ex, "value", 4, "amount", 1341, "data", "tree", "animal", "mouse"); 

Toute valeur de clé transmise peut être une chaîne ou une valeur d'une variable.

Il n'existe aucun moyen de définir des structures de données javascript déclarées statiquement qui utilisent les noms de propriétés d'une variable. Vous devez exécuter du code pour le faire.

1

Vous pouvez prolonger la Object.prototype:

Object.prototype.append = Object.prototype.append || function (key,val){ 
    this[key] = val; return this; 
}; 

pour pouvoir faire quelque chose comme

var value = 'value' 
    ,animal = 'animal' 
    ,ex = { 
      "amount": 1341, 
      "data": "tree", 
     }.append(value,4) 
      .append(animal,'mouse'); 

La méthode append pourrait être plus complète:

Object.prototype.append = Object.prototype.append || function(){ 
    var args = [].slice.call(arguments); 
    if (args.length===1 && /object/i.test(args[0].constructor)){ 
    for (var l in args[0]){ 
     if (args[0].hasOwnProperty(l)) 
     this[l] = args[0][l]; 
    } 
    } 
    if (args.length===2){ this[args[0]] = args[1]; } 
    if (args.length>2 && args.length%2<1){ 
    for (var i=0;i<args.length;i+=2){ 
     this[args[i]] = args[i+1]; 
    } 
    } 
    return this; 
}; 

Maintenant, vous pouvez:

var value = 'value' 
    ,animal = 'animal' 
    ,amount = 'amount' 
    ,data = 'data' 
    ,ex = {}.append(amount,1341,data,'tree',value,4,animal,'mouse'); 

Voir aussi this page (sur l'extension JS-objets natifs)

Questions connexes