簡體   English   中英

如何檢查JSON數組是否相等

[英]How to check if JSON array is equal to

我正在使用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不會失敗,但它既不會打印餅圖(沒有數據),也不會給我文本替換。

請有人告訴我我哪里出錯了!

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。

如果您需要幫助編碼,請告訴我。 不應該那么難

這也可能有所幫助: 類似的問題

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM