困惑使用for循环创建json

时间:2017-12-26 06:11:48

标签: javascript json

我正在尝试通过循环遍历我获得的数据来创建一个json,这里的问题是我能够正确获取值,但是到了键,它们没有按预期填充。这是我的代码。

var item = [{
    "max": "0.575",
  "ingredients": "a",
}, {
   "max": "10.25",
  "ingredients": "b"
}, {
   "max": "98.5",
   "ingredients": "c",
 }];

var valuesForChart = {
  data: []
};

item.forEach(function(subItem) {
  var names = subItem.ingredients;
  var level = subItem.max;
  valuesForChart.data.push({
    names: level
  });
});

document.getElementById("x").innerHTML=JSON.stringify(valuesForChart);

此处从我的数据库返回item。当我运行它时,我得到如下输出。

{"data":[{"names":"0.575"},{"names":"10.25"},{"names":"98.5"}]}

但我的预期输出是

{"data":[{"a":"0.575"},{"b":"10.25"},{"c":"98.5"}]}
对我出错的地方非常困惑。请告诉我如何解决这个问题。

这是一个工作小提琴。 https://jsfiddle.net/j8gj9uv0/2/

由于

1 个答案:

答案 0 :(得分:4)

您需要使用names

评估[names]

当您在对象的属性声明中使用[]表示法时,它会获得一个表达式并将该表达式的值设置为属性名称。因此,名称不只是names,而是names下的名称。

var item = [
    { "max": "0.575", "ingredients": "a" }, 
    { "max": "10.25", "ingredients": "b" }, 
    { "max": "98.5", "ingredients": "c" }
];

var valuesForChart = {
  data: []
};

item.forEach(function(subItem) {
  var names = subItem.ingredients;
  var level = subItem.max;
  valuesForChart.data.push({
    [names]: level
  });
});

console.log(valuesForChart);