检查是否有Object Array并忽略其他所有内容

时间:2014-01-23 20:50:46

标签: javascript jquery arrays each

我有一个多个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/
感谢

2 个答案:

答案 0 :(得分:4)

您可以使用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

答案 1 :(得分:0)

这是检查数组无错误的常见和交叉浏览器代码:

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