【问题标题】:Check if Object Array and ignore all else [duplicate]检查是否对象数组并忽略所有其他内容[重复]
【发布时间】:2014-02-14 15:24:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • jQuery.isArray()...
  • thisthis
  • if( !! specs )?这是一个双重否定,为什么不只是if(specs)
  • if (specs &amp;&amp; Array.isArray(specs) &amp;&amp; specs.length)

标签: javascript jquery arrays each


【解决方案1】:

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

【讨论】:

  • 谢谢,这些建议都不适用于我的小提琴,所以我想我可能有更深层次的问题。
  • @SteveAustin 你小提琴中的问题是x 不是有效的Json。请参阅我的更新答案。
  • 谢谢,这行得通。在仔细研究之后,我厌倦了使用 try / catch 。我最终只是简单地测试了[,如果没有,则留空。 var a = jQuery(this).text(), str = a.substr(0, 1), if (str.indexOf('[') == -1) { jQuery(this).empty(); } 这似乎对我有用。
  • @SteveAustin 这仍然不能保证字符串是有效的 Json(例如 [+] 会通过)。 try/catch 仍然更安全,但是,对于您的特定用例来说,这可能已经足够了。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2021-02-09
    • 2023-03-18
    相关资源
    最近更新 更多