如何检查JSON数组是否等于

How to check if JSON array is equal to

本文关键字:数组 是否 JSON 何检查 检查      更新时间:2024-02-04

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

有人能告诉我哪里出了问题吗!

Personaly我会在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

那个么你们就会知道,若和那个函数一样,若它们是false,那个么它们是否返回true。

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

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

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

我应该认为这样的东西应该有效:

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
                }
            }
        });
}

使用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填充即可。我认为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 {
    ...
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;
                            };