4

JSONとFlotで円グラフを作成しています。円グラフを作成する JS 関数は、Django から次の形式で JSON 配列を受け取ります。

[1, 3, 2, 5, 4]

データがない場合、JSON 配列は次のようになります。

[0, 0, 0, 0, 0]

データがない場合、円がプロットされず、代わりにテキストが表示されるように関数を調整しようとしています (「まだ表示するものはありません」など)。これまでのところ、私は試しました:

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

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 に答える
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 に答える
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 に答える