我有一个返回以下Json的Web服务:
[{"DailyHedge": "1.3414894654050926"},
{"OptimalHedge": "1.6788094119827568"}]
为了使用d3js绘制它,我需要将其转换为:
[{"category": "DailyHedge", "measure": 1.3414894654050926},
{"category": "OptimalHedge", "measure": 1.6788094119827568}]
我一直在浏览underscore.js,但总的来说我不知道该用什么......
答案 0 :(得分:3)
你可以使用普通的,普通的JavaScript来做到这一点,但是因为你使用的是D3,所以可以使用d3.keys
和d3.values
来完成。
根据API,d3.keys:
返回一个包含指定对象(关联数组)的属性名称的数组。返回数组的顺序是未定义的。
并且d3.values:
返回一个包含指定对象(关联数组)的属性值的数组。返回数组的顺序是未定义的。
这是一个演示:
var data = [{
"DailyHedge": "1.3414894654050926"
}, {
"OptimalHedge": "1.6788094119827568"
}];
var newData = [];
data.forEach(function(d) {
newData.push({
category: d3.keys(d)[0],
measure: +d3.values(d)[0]
});
});
console.log(newData)
<script src="https://d3js.org/d3.v4.min.js"></script>
在vanilla JavaScript中,只需使用Object.keys
和Object.values
即可。但是,IE,Opera或Safari上的Object.values
doesn't work。另一种方法是使用for...in
循环。
答案 1 :(得分:1)
使用普通javascript实现实现:
var data = [{"DailyHedge": "1.3414894654050926"},
{"OptimalHedge": "1.6788094119827568"}];
var newdata = [];
for(let key in data)
{
let obj = data[key];
Object.keys(obj).forEach(key => {
var row = {"category": key, "measure": obj[key]};
newdata.push(row);
});
}
console.log(newdata);