2012-08-23 99 views
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"; 

這是把整個物體撕成碎片,難於管理。

+0

的目標是什麼? – xdazz

+0

寫mongodb CRUD操作。更新非常繁瑣。 – ThomasReggi

回答

3

不,這是不可能的。你需要做的是第二種方式,或兩者的混合物:

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

ex[value] = 4; 
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; 
} 

它將使做出一堆物體的

+0

這是什麼意思? – Ryan

+0

這是將所有枚舉屬性設置爲「你的價值」的簡單方法,但我認爲這不會對OP有所幫助。 – alex

+0

@alex我同意,謝謝你的建議,雖然 – ThomasReggi

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數據結構,它們使用變量中的屬性名稱。你必須執行代碼才能做到這一點。

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

參見this page(上擴展本地JS對象)