2014-01-23 4 views
-1

У меня есть несколько дивов возвращающихся массив так:Проверьте массив объектов и игнорировать все остальное

[{"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/
Благодаря

+0

Eсти '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-a-array-in-javascript) – Blazemonger

+0

'if (!! спецификации) '? Это двойной негатив, почему бы не просто «if (specs)»? –

ответ

2

Вы можете использовать isArray функции из JQuery:

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 a = jQuery (this) .text(), str = a.substr (0, 1), if (str.indexOf ('[') == -1) { jQuery (this) .empty (это); } 'Кажется, это работает для моих целей. – SteveAustin

0

Это общепринятое и код броузеров для проверки безошибочным для массива:

if (Object.prototype.toString.call(someVar) === '[object Array]') { 
Смежные вопросы