我正在使用JSON和Flot创建饼图。创建饼图的JS函数以这种格式从Django接收JSON数组:
[1, 3, 2, 5, 4]
如果没有数据,则JSON数组为:
[0, 0, 0, 0, 0]
我正在尝试调整功能,这样如果没有数据,则不会绘制饼图,而是会出现一些文本(例如“Nothing to yet yet”)。到目前为止,我已经尝试过:
function loadWeekChart(theData) {
var blankData = [0, 0, 0, 0, 0];
if ($.data(theData) == $.data(blankData)){
$('#week-pie-chart').empty().append('Nothing to show yet');
} else {
$.plot($("#week-pie-chart"), theData ,
{
series: {
pie: {
show: true
}
}
});
}
}
JS没有失败,但它既没有打印饼图(没有数据),也没有给我文本替换。
请有人告诉我我哪里出错了!
答案 0 :(得分:2)
Personaly我会做下面的事情,假的代码......
set boolean to true
for each element in the JSON
compare it with blank data element
if they are not equal boolean false
else continue
return boolean
然后你会知道如果它们是假的,那么该函数是否返回true。
如果您需要帮助编码,请告知我们。不应该那么辛苦
这也可能有所帮助:Similar Question
function checkJsons(otherJson,newJson)
{
var sameJson = true;
for (var key in otherJson) {
if(otherJson[key] != newJson[key]) {sameJson=false;} return sameJson;
}
}
这应该有所帮助,而不是测试
一种更好的方法,但更难以阅读
function checkJsons(otherJson,newJson)
{
for (var key in otherJson) {if(otherJson[key] != newJson[key]) {return false;}}
return true;
}
function pieChartData(theData)
{
var blankData = [0, 0, 0, 0, 0];
if(checkJsons(blankData,theData)){$('#week-pie-chart').empty().append('Nothing to show yet');} else { // do your code here // }
}
答案 1 :(得分:1)
我认为这样的事情应该有效:
var replace = true;
for(var i = 0; i < theData.length; i++)
{
if(theData.[i] != 0)
{
replace = false;
break;
}
}
if(replace)
{
$('#week-pie-chart').empty().append('Nothing to show yet');
}
else
{
$.plot($("#week-pie-chart"), theData ,
{
series: {
pie: {
show: true
}
}
});
}
答案 2 :(得分:1)
如何使用JSON.stringify?
l1 = [0, 0, 0, 0];
l2 = [0, 0, 0, 1];
var bEqual = JSON.stringify(l1) == JSON.stringify(l2);
console.log(bEqual);
答案 3 :(得分:0)
您不需要与0填充数组进行比较。只需检查输入数组是否为0。我认为reduce()
是最好的:
if(arr.reduce(function(a, b){ return a + b; }) == 0) {
//Nothing to show
} else {
...
...但旧浏览器不支持reduce(),所以我建议使用$.grep()
代替(因为你已经在使用jQuery)。
if($.grep(theData, function (a) { return a != 0; }).length == 0) {
//Nothing to show
} else {
...
答案 4 :(得分:0)
LmC的答案适合与JSON对象进行比较。我改编它来比较两个甚至可以嵌套JSON数组的JSON数组。这是代码:
var areJSONArraysEqual = function(jsonArray1,
jsonArray2) {
if(jsonArray1.length===0||jsonArray2.length===0){
if(jsonArray1.length===0 && jsonArray2.length===0){
return true;
}else{
return false;
}
}
for(var i=0;i<jsonArray1.length;i++){
for ( var key in jsonArray1[i]) {
if(jsonArray1[i][key].length>1){
return areJSONArraysEqual(jsonArray1[i][key],jsonArray2[i][key])
}
if (jsonArray1[i][key] != jsonArray2[i][key]) {
return false;
}
}
}
return true;
};