我正在尝试通过循环遍历我获得的数据来创建一个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/
由于
答案 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);