2013-08-23 2 views
7

Я знаю, что с первого взгляда это звучит как дубликат вопрос, но я не думаю, что это ...Проверьте массив JSON пуст

Я получаю обратно массив JSON как:

var test1 = [] ; 

или

var test2 = [{},{},{}] ; //This is empty 

у меня никаких проблем не узнать, если test1 пуст.

jQuery.isEmptyObject(test1) 

Моя проблема с test2 ... Пожалуйста, обратите внимание, что в некоторых случаях test2 может вернуть что-то вроде:

var test2 = [{"a":1},{},{}] ; //All these are not empty 
var test2 = [{},{"a":1},{}] ; //All these are not empty 
var test2 = [{},{},{"a":1}] ; //All these are not empty 

Вышеуказанные сценарии не должны учитываться как empty.I» ve попытался использовать .length, но это не помогает, поскольку длина всегда 3 ... Любые идеи?

Cheers.

+0

Вы хотите сказать, что он должен возвращать true только в том случае, если массив пуст или массив содержит объекты без ключей? –

+0

Почему бы просто не использовать этот оператор if: 'test2 [0] .length === 0 && test [1] .length === 0 && test [2] .length === 0' я знаю, что он груб, но независимо – Markasoftware

+1

' length' не является допустимым свойством объекта. –

ответ

7
function isArrayEmpty(array) { 
    return array.filter(function(el) { 
     return !jQuery.isEmptyObject(el); 
    }).length === 0; 
} 

jsFiddle Demo

Передает все тесты.

Чистое решение JavaScript будет заменить !jQuery.isEmptyObject(el) с Object.keys(el).length !== 0

Edit: Использование Array.prototype.every

function isArrayEmpty(array) { 
    return array.every(function(el) { 
     return jQuery.isEmptyObject(el); 
    }); 
} 
+0

Привет, помощник, который был нужен :) – Thanos

-1

чека обернув каждое значение в массиве и возвращать ошибку Попробуйте

for(i=0;js_array[i]!=null;i++) 
{ 
    if(js_array[i]=="") 
    { 
    alert("Empty"); 
    } 
} 
+0

Это всегда будет возвращать false, так как условие использует присвоение значению false. –

+0

Извините обновлено..необходимо условие –

0

Довольно просто ...

if(jQuery.isEmptyObject(test2[0]) && jQuery.isEmptyObject(test2[1]) && jQuery.isEmptyObject(test2[2]))) 
    // do something 
+1

Что делать, если массив имеет 4 элемента? –

+0

Да, я был ленив, но вы могли бы легко реализовать это в цикле. – Ch33f

1

Без JQuery: с помощью Array.filter и Object.keys:

function JSONEmpty(obj){ 
    return !obj.length || 
      !obj.filter(function(a){return Object.keys(a).length;}).length; 
} 
// usage 
JSONEmpty([{"a":1},{},{}]); //=> false 
JSONEmpty([{},{"a":1},{}]); //=> false 
JSONEmpty([{},{},{"a":1}]); //=> false 
JSONEmpty([]);    //=> true 
JSONEmpty([{},{},{}]);  //=> true 

обновление 2018Arrow functions теперь поддерживаются всеми современными браузерами, так как himel-nag-rana предусмотрено, вы также можете использовать:

const JSONEmpty = obj => !obj.length || !obj.filter(a => Object.keys(a).length).length; 

More info
More info (ссылки содержат регулировочные шайбы для старых браузеров)

+0

Возможно, стоит отметить совместимость браузера для 'Object.keys' и' Array.filter'. –

+0

более короткая версия со стрелкой function '' '' isJSONArrayEmpty (obj) { return! Obj.length || ! Obj.filter (a => Object.keys (a) .length) .length; } '' '' –

+1

@HimelNagRana ​​Я уверен, что функции стрелок не были или частично реализованы в большинстве браузеров еще в августе 2013 года – KooiInc

0

Может быть, вы могли бы попробовать использовать функцию как

function isEmptyObject (test) { 
    for (var i in test) { 
     if (!jQuery.isEmptyObject(test[i]) 
      return false; 
    } 
    return true; 
} 
2

Для тех, кто играет в home, решение без jQuery:

var test2 = [{a: 1},{},{}] ; //This is empty 

function isEmpty(val) { 
    var len = val.length, 
     i; 

    if (len > 0) { 
     for (i = 0; i < len; ++i) { 
      if (!emptyObject(val[i])) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

function emptyObject(o) { 
    for (var key in o) { 
     if (o.hasOwnProperty(key)) { 
      return false; 
     } 
    } 
    return true; 
} 

console.log(isEmpty(test2)); 
1

У меня была такая же проблема, и я пришел с этим решением без JQuery:

function isEmpty(x) { 
    for(var i in x) { 
     return false; 
    } 
    return true; 
} 
0

Вот мое взятие: превратить массив в набор и проверить размер.

var myArray = [1,2,3]; 
var mySet = new Set(myArray); 
console.log(mySet.size === 0); 
Смежные вопросы