如何检查JSON数组是否相等

时间:2012-07-24 09:24:55

标签: javascript arrays json equals flot

我正在使用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没有失败,但它既没有打印饼图(没有数据),也没有给我文本替换。

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

5 个答案:

答案 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;
                            };