【发布时间】:2015-09-09 23:38:07
【问题描述】:
所以我正在尝试在meteor中使用chartjs构建一个饼图。
我很确定问题在于优先顺序在这里讨论。
我需要这个顺序的对象
{
value: 900.65,
color:"#red",
highlight: "#FF5A5E",
label: "income"
}
但我按这个顺序得到它
{
color: "#red"
highlight: "#FF5A5E"
label: "income"
value: 900.65
}
这是我的循环
function drawExpPie(){
data = [];
var Task = Tasks.find({},{fields:{value:1,text:1}}).fetch();
for(var i = 0; i < Task.length; i++) {
var newdataset = {
label:Task[i].text,
highlight: "#FCA456",
color: "red",
value:Task[i].value,
};
data.push(newdataset);
}
console.log(data);
var context = document.getElementById('myExpChart').getContext('2d');
var myPieChart = new Chart(context).Pie(data);
}
Template.exp.helpers({
exp: function() {return Session.get("exp");}
});
Template.exp.rendered = function(){
drawExpPie();
};
感谢任何帮助。谢谢
【问题讨论】:
-
到底是什么问题?有什么错误会导致您考虑优先级吗?
-
javascript 中的对象没有任何保证顺序。此外,您的两个对象具有不同的字段值。是否有您正在谈论但未显示的数组?我很困惑。你的 for 循环也不能产生第一个对象(不同的值)。
-
财产顺序无关紧要。您要解决的实际问题是什么?
-
如果您的
data变量实际上是一个数组,那么data.push()将不会“重置”该数组。每次它都会附加到数组的末尾。一定有一些你误解的东西,或者你没有向我们展示的东西。此外,我将重申其他有关对象内属性顺序的 cmets:这无关紧要。如果您编写代码的顺序确实很重要,例如for-in循环,那么您很可能做错了。当然,chart.js 之类的代码不会依赖于对象内属性的顺序。 -
顺便说一句,代码无意中使
data成为全局变量。这可能会把事情搞砸,具体取决于代码的其他功能。应该是var data = [];。
标签: javascript arrays meteor push chart.js