Javascript 如何检查JSON数组是否等于

Javascript 如何检查JSON数组是否等于,javascript,arrays,json,equals,flot,Javascript,Arrays,Json,Equals,Flot,我正在用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 ($.da

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


请有人告诉我哪里出了问题

个人而言,我会执行以下操作,这是psuedo代码

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)
{
  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 // }
} 

我认为这样做应该奏效:

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
                }
            }
        });
}
var replace=true;
对于(变量i=0;i
如何使用JSON.stringify

l1 = [0, 0, 0, 0];
l2 = [0, 0, 0, 1];
var bEqual = JSON.stringify(l1) == JSON.stringify(l2);
console.log(bEqual);

您不需要与0填充数组进行比较。只需检查输入数组是否为0填充。我认为这是最好的:

if(arr.reduce(function(a, b){ return a + b; }) == 0) {
    //Nothing to show
} else {
    ...
…但较旧的浏览器不支持reduce(),因此我建议改用(因为您已经在使用jQuery)


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;
                            };
var areJSONArraysEqual=函数(jsonArray1,
jsonArray2){
if(jsonArray1.length==0 | | jsonArray2.length==0){
if(jsonArray1.length==0&&jsonArray2.length==0){
返回true;
}否则{
返回false;
}
}
对于(var i=0;i1){
返回areJSONArraysEqual(jsonArray1[i][key],jsonArray2[i][key])
}
if(jsonArray1[i][key]!=jsonArray2[i][key]){
返回false;
}
}
}
返回true;
};

现在,您可能需要一些调整,但基本上就是这样,如果您同意添加更优雅的代码,请将问题标记为正确,并且比第一个要快得多Hanks Liam-恐怕我需要更多的帮助。如何将其与现有代码集成以生成饼图?为了进一步澄清,应该生成替换文本的唯一数组应该是:
[0,0,0,0,0]
<代码>[0,1,0,0,0]仍然应该生成一个饼图……这应该有助于我的新函数返回空白数据或获取它的数据!谢谢你,利亚姆。仅供参考,这里有一个输入错误:
if(checkJson)(
应该是:
if(checkJson)(
数组必须逐个元素进行比较才能进行检查"“相等”。我尝试了这一点,但我得到了以下错误:SyntaxError:Unexpected token“in”这是一条很长的捷径,加上您没有与JSON进行比较您比较JSON和值0?对于maintenceOops来说是不好的。我似乎错误地编写了
for
循环;我不经常使用Javascript编程。去掉
int
并将
var
改为。其性能可能不如将两个对象字符串化,然后比较字符串。
if($.grep(theData, function (a) { return a != 0; }).length == 0) {
    //Nothing to show
} else {
    ...
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;
                            };