Javascript 通过JSON进行迭代
我有以下几个问题:Javascript 通过JSON进行迭代,javascript,json,d3.js,jinja2,Javascript,Json,D3.js,Jinja2,我有以下几个问题: sales = { "February 20, 2014": { "services": 0, "total": 160, "repairs": 0 }, "February 18, 2014": { "services": 360, "total": 1109.95, "repairs": 410 } }; 现在,这个JSON包含了我想要绘制的数据。我已经实现了漂亮的d3.js图表,但是我在从该JSON获取数
sales = {
"February 20, 2014": {
"services": 0,
"total": 160,
"repairs": 0
},
"February 18, 2014": {
"services": 360,
"total": 1109.95,
"repairs": 410
}
};
现在,这个JSON包含了我想要绘制的数据。我已经实现了漂亮的d3.js图表,但是我在从该JSON获取数据到图表时遇到了问题。我需要以某种方式遍历JSON,并为服务构建三个数组,total,repairs,并让它们包含键值对,{x:date,y:value}
所以,这个过程应该是这样的(伪代码):
基于上述示例json的服务结果如下:
total = [{x: "February 20, 2014", y: "160.0"}, {x: "February 18, 2014", y: "1109.95.0"}]
当我在网站上呈现此内容时,我需要用Javascript实现此功能。尽管很简单(值的元组):
小提琴:
如果您需要您提到的确切结构,那么:
var services = [];
var total = [];
var repairs = [];
for(i in sales) {
var obj = {x: "", y: ""};
obj.x = i;
obj.y = sales[i].services;
services.push(obj);
obj.y = sales[i].total;
total.push(obj);
obj.y = sales[i].repairs;
repairs.push(obj);
}
除了Matus Dubrava的答案之外,您应该始终确保在这种for循环样式中使用
hasOwnProperty()
,以避免迭代从对象原型继承的成员
var services = [];
var total = [];
var repairs = [];
for(i in sales) {
if (sales.hasOwnProperty(i))
continue;
services.push(sales[i].services);
total.push(sales[i].total);
repairs.push(sales[i].repairs);
}
一些浏览器实际上会迭代继承的成员,比如
.length
和.push
为什么要在javascript中使用标记python?我正在使用python生成dict并使用jinja呈现它。我理解它造成的混乱,将删除标签。对不起,没问题。我看到了你的最后一行,就在我用python编写解决方案的时候,你需要{x:“二月..”,y:160}还是只要{“二月..”,160}就足够了?如果是这样,那么看看我的解决方案。现在它甚至应该有提到的结构。
var services = [];
var total = [];
var repairs = [];
for(i in sales) {
var obj = {x: "", y: ""};
obj.x = i;
obj.y = sales[i].services;
services.push(obj);
obj.y = sales[i].total;
total.push(obj);
obj.y = sales[i].repairs;
repairs.push(obj);
}
var services = [];
var total = [];
var repairs = [];
for(i in sales) {
if (sales.hasOwnProperty(i))
continue;
services.push(sales[i].services);
total.push(sales[i].total);
repairs.push(sales[i].repairs);
}