2015-11-10 90 views
-1
function one(data) { 
    someotherfunction({ 
    data.id: { 
     name: data.nm, 
     age: data.age 
    }); 
} 
one({ id: 2, name: "Stack", age: "20" }); 

爲什麼我不能將data.id設置爲該子對象的屬性名稱?我嘗試了很多方法來設置id,但它只在將其設置爲某個字符串名稱時才起作用....無法使用JSON中的變量設置屬性名稱

var i = data.id; 
someotherfunction({i:{name:data.nm,age:data.age}); 

它不能識別變量嗎?

+0

注意,ECMAScript的2015年有[*計算屬性名*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer),但支持可能不足以讓他們在網上普遍使用。 – RobG

回答

0

你可能會尋找computed property names,在ECMAScript中2015年的新功能,支持在某些瀏覽器中,例如:

// Requires support for ECMAScript 2015 computed property names 
 
function one(data) { 
 
    return { 
 
    [data.id]: { 
 
     name: data.name, 
 
     age: data.age 
 
    }}; 
 
} 
 

 
document.write(JSON.stringify(one({ id: 2, name: "Stack", age: "20" })));

1

我不認爲這是一個有效的propertyName或標識符,它肯定不是一個字符串文字。試着這樣說:

function one(data){ 
    var nObj = { }; 
    nObj[data.id] = { name : data.nm, age: data.age }; 
    someotherfunction(nObj); 
} 

one({id:2,name:"Stack",age:"20"}); 
//nObj = { 2 : { name : "Stack, age : "20" } } 
1

從RobG的回答爲:https://stackoverflow.com/a/6500668

在對象文本(ECMA-262§11.1.5稱之爲 「對象 初始化器」),關鍵要有一個的:

  1. IdentifierName
  2. 串文字
  3. NumericLiteral

你可以這樣做:

function one(data) { 
    var d = {}; 
    d[data.id] = { name: data.name, age: data.age }; 
    someotherfunction(d); 
    } 
one({ id: 2, name: 'Stack', age: '20' }); 

撥弄代碼爲:
http://jsfiddle.net/sna04g8m/1