2014-01-23 37 views
-1

我有多個div返回一個數組是這樣的:檢查對象數組,並忽略一切

[{"k":"Model","v":"box"},{"k":"Color","v":"blue"},{"k":"Size","v":"med"},{"k":"Type","v":"good"}] 

有時候,非陣列項目回來,我想忽略這些。
可能是空格或隨機無序空白列表。 所以我只想處理只返回的數組,其餘部分留空。
我怎麼能檢查它是否是數組,並忽略其餘的?

jQuery('.overview').each(function() { 
    var $overview = jQuery(this), 
     specs = jQuery.parseJSON($overview.html()); 
    if (!! specs) { 
     $overview.html('<div class="bullet_spec"></div>'); 
     jQuery.each(specs, function() { 
      $overview.children('div').append('<ul class="specs"><li class="label">' + this.k + ' : ' + this.v + '</li></ul>'); 
     }); 
    } else { // leave blank?? not sure what to do here 
    } 
}); 

這裏是我的小提琴:http://jsfiddle.net/veGPN/
感謝

+0

有'jQuery.isArray()'... – Tomalak

+0

請參閱[this](http://stackoverflow.com/questions/4775722/check-if-object-is-array)和[this](http://stackoverflow.com/questions/767486/how-do-you-check-if-a-variable-is-an-array-in-javascript) – Blazemonger

+0

'if(!!規格)'?這是一個雙重否定,爲什麼不只是'如果(規格)'? –

回答

2

您可以使用從jQuery的的isArray功能:

if (jQuery.isArray(specs)) { 
    $overview.html('<div class="bullet_spec"></div>'); 
    jQuery.each(specs, function() { 
     $overview.children('div').append('<ul class="specs"><li class="label">' + this.k + ' : ' + this.v + '</li></ul>'); 
    }); 
} 

但是,它出現在你的提琴問題是一些的元素(x)甚至不是Json。所以並不是結果不是數組,而是根本無法解析結果。你可以簡單地用try/catch包裝你的解析腳本優雅地處理這個問題:

var $overview = jQuery(this), spec; 
try { 
    specs = jQuery.parseJSON($overview.html()); 
} catch(e) { 
    return; 
} 

Demonstartion

+0

謝謝,這些建議都沒有在我的小提琴中奏效,所以我想我可能會遇到更深層次的問題。 – SteveAustin

+0

@SteveAustin你的小提琴中的問題是'x'不是有效的Json。看到我更新的答案。 –

+0

謝謝,這有效。在仔細查看它之後,我很疲倦地使用try/catch。我結束了簡單的測試'[',如果沒有留下空的。 var str = a.substr(0,1), if(str.indexOf('[')== -1){jQuery(this).empty(){var a = jQuery(this).text(), str = ); }'這似乎適用於我的目的。 – SteveAustin

0

這是常見的,跨瀏覽器的代碼來檢查無差錯的數組:

if (Object.prototype.toString.call(someVar) === '[object Array]') {