1

我正在运行这段代码。

var output = {"records": []};
for(i = 0; i < data.length; i++)
  output.records[i] = { propertyName : data[i][propertyName] }

我预计输出将采用以下形式。

{ "cat" : "mjau" }
{ "dog" : "woff" }

相反,我对此感到惊讶。

{ "propertyName" : "mjau" }
{ "propertyName" : "woff" }

如何获取变量propertyName

我正在尝试创建一个解析器,它将创建许多记录,这些记录都是cat但是,当从其他地方调用时,这些记录应该具有dog属性。我希望避免为此创建两个不同的代码段。

我发现了这个问题我怀疑它包含了我的问题的答案。但是,由于无知,我不明白。

4

4 回答 4

3

对象字面量中的键不会在 JavaScript 中求值。因此,您需要创建一个空对象 ( {}),然后动态分配密钥:

output.records[i] = {};
output.records[i][propertyName] = data[i][propertyName]
于 2012-12-10T20:28:56.743 回答
0
var a = {b:'c'}

就像

var a = {};
a['b'] = 'c';

你想要的是

a[b] = c

那是

output.records[i] = {};
output.records[i][propertyName] = data[i][propertyName];

您在这个 MDN 文档中有:使用对象

于 2012-12-10T20:28:49.540 回答
0

{ propertyName : data[i][propertyName] }属性名称部分应该是常量字符串。如果你传递一个变量,它不会获取它的值。

你要做的是

for(i = 0; i < data.length; i++){
  var a = {};
  a[propertyName] = data[i][propertyName];
  output.records.push(a);
}
于 2012-12-10T20:30:32.627 回答
-1

你可以试试这个:

'"' + propertyName + '"' : ...
于 2012-12-10T20:29:18.777 回答