空配列 - javascript 連想配列 空 判定




空のJavaScriptオブジェクトをテストするにはどうすればよいですか? (20)

AJAXリクエストの後、私のアプリケーションが次のような空のオブジェクトを返すことがあります。

var a = {};

そのような場合にどうすれば確認できますか?


  1. ただの回避策。 データがない場合にサーバーが特別なプロパティを生成できますか?

    例えば:

    var a = {empty:true};
    

    その後、AJAXコールバックコードで簡単にチェックすることができます。

  2. それを確認する別の方法:

    if (a.toSource() === "({})")  // then 'a' is empty
    

編集 :任意のJSONライブラリ(fe JSON.js)を使用する場合JSON.encode()関数を試し、空の値の文字列に対して結果をテストすることがあります。


JSON.stringifyの使用はどうですか? 現代のすべてのブラウザでほぼ利用可能です。

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

Thevsの答えに加えて:

var o = {};
alert($.toJSON(o)=='{}'); // true

var o = {a:1};
alert($.toJSON(o)=='{}'); // false

それはjquery + jquery.jsonです


jQueryとWebブラウザが利用できない場合は、underscore.jsにisEmpty関数もあります。

_.isEmpty({}) // returns true

さらに、入力パラメータがオブジェクトであるとは限りません。 リストや文字列、または未定義の場合は、正解になります。


Sugar.JSは、この目的のために拡張オブジェクトを提供します。 コードはきれいでシンプルです:

拡張オブジェクトを作成する:

a = Object.extended({})

サイズを確認してください:

a.size()

Underscoreを使うことができます。

_.isEmpty({}); // true

あなたが新しいブラウザを使用しているなら、簡単な方法があります。 Object.keys(obj).length == 0


あなたはオブジェクトキーの数をチェックすることができます:

if (Object.keys(a).length > 0) {
    // not empty
}

これを行う簡単な方法はありません。 プロパティを明示的にループする必要があります:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}

ECMAScript 5のサポートが利用可能な場合は、代わりにObject.keys()使用できます。

function isEmpty(obj) {
    return Object.keys(obj).length === 0;
}

もう1つの選択肢は、 jquery (32kB)、 lodash (50kB)、またはunderscore (16.4kB)とは対照的に、 lodash (14kB)を使用するunderscoreです。 is.jsは、オブジェクトが空であるかどうかを判断するために使用できる前述のライブラリの中で最速のライブラリであることが判明しました。

http://jsperf.com/check-empty-object-using-libraries

明らかにこれらのライブラリは全く同じではありませんので、簡単にDOMを操作する必要がある場合は、 jqueryがまだ良い選択肢になっているかもしれません。あるいは型チェック以外のものが必要な場合は、 lodashまたはunderscoreが良いかもしれません。 is.jsの構文は次のとおりです。

var a = {};
is.empty(a); // true
is.empty({"hello": "world"}) // false

アンダースコアとロダッシュの_.isObject()と同様、これはobjects専用ではありませんが、 arraysstringsも当てはまりstrings

このライブラリでは、 Object.getOwnPropertyNamesと似ているObject.keysObject.keysObject.getOwnPropertyNamesが、 Object.getOwnPropertyNameshere説明するように、列挙可能なプロパティと列挙可能でないプロパティを返すため、より完全here

is.empty = function(value) {
    if(is.object(value)){
        var num = Object.getOwnPropertyNames(value).length;
        if(num === 0 || (num === 1 && is.array(value)) || (num === 2 && is.arguments(value))){
            return true;
        }
        return false;
    } else {
        return value === '';
    }
};

ライブラリ(これはわかりやすい)を持ち込みたくない場合に、オブジェクト(配列や文字列ではない)だけをチェックしていることがわかっている場合は、次の関数が必要です。

function isEmptyObject( obj ) {
    return Object.getOwnPropertyNames(obj).length === 0;
}

これは、オブジェクトであるかどうかをチェックしていないからですが、is.jsより少し速いです。


別のシンプルで純粋なJSの方法:)

if (JSON.stringify(pathParams) === '{}')


古い質問ですが、ちょうど問題がありました。 あなたの唯一の目的がオブジェクトが空でないかどうかをチェックすることであるなら、JQueryを含めることは本当に良い考えではありません。 代わりに、 JQueryのコードをちょっと調べれば、答えが得られます:

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}

次の例は、JavaScriptオブジェクトが空であるかどうかをテストする方法を示しています。空の場合は、独自のプロパティがありません。

このスクリプトはES6で動作します。

const isEmpty = (obj) => {
    if (obj === null ||
        obj === undefined ||
        Array.isArray(obj) ||
        typeof obj !== 'object'
    ) {
        return true;
    }
    return Object.getOwnPropertyNames(obj).length === 0;
};
console.clear();
console.log('-----');
console.log(isEmpty(''));           // true
console.log(isEmpty(33));           // true
console.log(isEmpty([]));           // true
console.log(isEmpty({}));           // true
console.log(isEmpty({ length: 0, custom_property: [] })); // false
console.log('-----');
console.log(isEmpty('Hello'));      // true
console.log(isEmpty([1, 2, 3]));    // true
console.log(isEmpty({ test: 1 }));  // false
console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false
console.log('-----');
console.log(isEmpty(new Date()));   // true
console.log(isEmpty(Infinity));     // true
console.log(isEmpty(null));         // true
console.log(isEmpty(undefined));    // true


正解は次のとおりです。

const isEmptyObject = obj =>
  Object.getOwnPropertyNames(obj).length === 0 &&
  Object.getOwnPropertySymbols(obj).length === 0 &&
  Object.getPrototypeOf(obj) === Object.prototype;

これは以下をチェックします:

  • オブジェクトには、(列挙可能性に関係なく)独自のプロパティはありません。
  • オブジェクトには、独自のプロパティシンボルはありません。
  • オブジェクトのプロトタイプは正確にObject.prototypeです。

つまり、オブジェクトは{}作成されたオブジェクトと区別できません。


私のテイク:

function isEmpty(obj) {
    return !Object.keys(obj).length > 0;
}

var a = {a:1, b:2}
var b = {}

console.log(isEmpty(a)); // false
console.log(isEmpty(b)); // true

ちょうど、私はすべてのブラウザが現在Object.keys()実装しているとは思わない。


私はこれを使用しています。

function isObjectEmpty(object)
{
  var isEmpty = true;
  for(keys in object)
  {
     isEmpty = false;
     break; // exiting since we found that the object is not empty
  }
  return isEmpty;
}

例えば:

var myObject = {}; // Object is empty
var isEmpty  = isObjectEmpty(myObject); // will return true;

// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"}; 

// check if the object is empty
isEmpty  = isObjectEmpty(myObject); // will return false;

ここから

更新

または

isEmptyObjectのjQuery実装を使用することができます

function isEmptyObject ( obj ) {
        var name;
        for ( name in obj ) {
            return false;
        }
        return true;
    }

私はちょうど同様の状況に遭遇した。 私はJQueryを使いたくないし、純粋なJavascriptを使ってこれをやりたかった。

そして、私がしたことは次の条件を使い、それは私のために働いた。

var obj = {};
if(JSON.stringify(obj) === '{}') { //This will check if the object is empty
   //Code here..
}

そうでない場合は、 JSON.stringify(obj) !== '{}'

このJSFiddleチェックしてJSFiddle


簡単なループ:

var is_empty = true;
for(var i in obj) {
    is_empty = false;
    break;
}


jQueryや他のライブラリを使わなかったこの単純なコードを使うことができます

var a=({});

//check is an empty object
if(JSON.stringify(a)=='{}') {
    alert('it is empty');
} else {
    alert('it is not empty');
}

JSONクラスとその関数( parsestringify )は非常に便利ですが、この簡単なコードhttp://www.json.org/js.html修正できるIE7のいくつかの問題がありhttp://www.json.org/js.html

他のシンプルウェイ(シンプルウェイ):
jQueryまたはJSONオブジェクトを使用せずにこの方法で使用できます。

var a=({});

function isEmptyObject(obj) {
    if(typeof obj!='object') {
        //it is not object, so is not empty
        return false;
    } else {
        var x,i=0;
        for(x in obj) {
            i++;
        }
        if(i>0) {
            //this object has some properties or methods
            return false;
        } else {
            //this object has not any property or method
            return true;
        }
    }
}

alert(isEmptyObject(a));    //true is alerted

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




json