8

一見したところ、重複した質問のように聞こえますが、そうではないと思います...

次のように 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

上記のシナリオは空としてカウントされるべきではありません。使用しようとしまし.lengthたが、長さが常に 3 であるため、役に立ちません...何かアイデアはありますか?

乾杯。

4

8 に答える 8

3

自宅で遊んでいる人向けの非 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));
于 2013-08-23T06:39:34.260 に答える
2

JQuery なし: Array.filter1Object.keys2を使用:

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

update 2018 アロー関数は最新のすべてのブラウザーでサポートされるようになったため、himel-nag-ranaで規定されているように、次のものも使用できます。

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

1 詳細情報
2 詳細情報 (リンクには古いブラウザー用の shim が含まれています)

于 2013-08-23T06:38:24.807 に答える
0

ものすごく単純...

if(jQuery.isEmptyObject(test2[0]) && jQuery.isEmptyObject(test2[1]) && jQuery.isEmptyObject(test2[2])))
    // do something
于 2013-08-23T06:38:08.927 に答える
0

たぶん、次のような関数を使用してみてください

function isEmptyObject (test) {
    for (var i in test) {
        if (!jQuery.isEmptyObject(test[i])
            return false;
    }
    return true;
}
于 2013-08-23T06:38:29.130 に答える