关于Javascript:检查对象阵列和忽视所有ELSE

Check if Object Array and ignore all else

本问题已经有最佳答案,请猛点这里访问。

我有多个div返回这样的数组:

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

有时,非数组项会返回,我想忽略这些项。可以是空格或随机的未排序空白列表。所以我只想处理返回的数组,剩下的空白。我如何检查它是否是数组并忽略其余部分?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
jQuery('.overview').each(function () {
   var $overview = jQuery(this),
       specs = jQuery.parseJSON($overview.html());
   if ( !! specs) {
       $overview.html('');
       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:/JSFIDDL.NET/VEGFPN/谢谢


您可以使用jquery中的isArray函数:

1
2
3
4
5
6
7
8
9
10
if (jQuery.isArray(specs)) {
   $overview.html('');
   jQuery.each(specs, function () {
       $overview.children('div').append('<ul class="specs"><li class="label">' + this.k + ' : ' + this.v + '
</li>

</ul>
'
);
   });
}

然而,在您的小提琴中出现的问题是一些元素(x)甚至不是JSON。所以不是结果不是数组,而是根本无法解析结果。您可以简单地用EDCOX1 OR 2来封装解析脚本,以优雅地处理:

1
2
3
4
5
6
var $overview = jQuery(this), spec;
try {
    specs = jQuery.parseJSON($overview.html());
} catch(e) {
    return;
}

魔鬼崇拜


这是常见的跨浏览器代码,用于检查数组是否无错误:

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