4

我正在使用 JSON 和 Flot 创建饼图。创建饼图的 JS 函数接收来自 Django 的 JSON 数组,格式如下:

[1, 3, 2, 5, 4]

如果没有数据,则 JSON 数组为:

[0, 0, 0, 0, 0]

我正在尝试调整该功能,以便如果没有数据,则不会绘制饼图,而是会出现一些文本(例如“Nothing to show 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 没有失败,但它既不打印饼图(没有数据)也不给我文本替换。

请有人告诉我我哪里出错了!

4

5 回答 5

2

就个人而言,我会执行以下伪代码...

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 如果它们是 false 如果它们不是。

如果您需要帮助编码,请告诉我。不应该那么难

这也可能有帮助:类似的问题

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 // }
} 
于 2012-07-24T09:28:23.250 回答
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
                }
            }
        });
}
于 2012-07-24T09:38:51.837 回答
1

使用 JSON.stringify 怎么样?

l1 = [0, 0, 0, 0];
l2 = [0, 0, 0, 1];
var bEqual = JSON.stringify(l1) == JSON.stringify(l2);
console.log(bEqual);
于 2012-07-24T09:46:49.650 回答
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 {
    ...
于 2012-07-24T09:59:54.890 回答
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;
                            };
于 2015-10-27T21:02:41.883 回答