0

在下面的示例中,是否可以将一个或多个对象键设置为"value"变量?我想在保持 JOSN 对象完整的同时做到这一点。

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

我知道这样做是可能的。

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

这会将整个对象撕成碎片,并且更难管理。

4

4 回答 4

3

不,那是不可能的。您需要采用第二种方式,或两种方式的混合:

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

ex[value] = 4;
于 2012-08-23T04:12:32.137 回答
1

您可以扩展Object.prototype

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

能够做类似的事情

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

append方法可能更全面:

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

现在你可以:

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

另请参阅此页面(关于扩展本机 JS 对象)

于 2012-08-23T05:18:25.440 回答
0

这是简单的方法......

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

它将能够制作一堆对象

于 2012-08-23T04:15:27.877 回答
0

如果您只是想节省一些语法输入或对使用变量中的属性名称的初始对象有更多的自由,您可以创建一个函数,该函数将采用可变数量的参数并将每对连续的参数解释为键和价值:

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");

传递的任何键值都可以是字符串或变量中的值。

无法定义使用变量中的属性名称的静态声明的 javascript 数据结构。您必须执行代码才能做到这一点。

于 2012-08-23T04:25:39.997 回答