Как сопоставить пустой словарь в Javascript? - PullRequest
50 голосов
/ 20 мая 2011

От узла REPL вещь,

> d = {}
{}
> d === {}
false
> d == {}
false

Если у меня есть пустой словарь, как мне убедиться, что это пустой словарь?

Ответы [ 10 ]

70 голосов
/ 20 мая 2011
function isEmpty(obj) {
  return Object.keys(obj).length === 0;
}
19 голосов
/ 20 мая 2011

Вы можете расширить Object.prototype с помощью этого метода isEmpty, чтобы проверить, не имеет ли объект собственных свойств:

Object.prototype.isEmpty = function() {
    for (var prop in this) if (this.hasOwnProperty(prop)) return false;
    return true;
};
12 голосов
/ 29 октября 2013

Как насчет использования jQuery?

$.isEmptyObject(d)
10 голосов
/ 20 мая 2011

Поскольку у него нет атрибутов, в цикле for не будет ничего для перебора.Чтобы отдать должное, я должен найти это предложение здесь .

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

isEmpty({a:1}) // false
isEmpty({}) // true
9 голосов
/ 05 августа 2012

Это то, что jQuery использует, работает просто отлично. Хотя для этого требуется, чтобы скрипт jQuery использовал isEmptyObject .

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

//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False

Если включение jQuery не является опцией, просто создайте отдельную чистую функцию javascript.

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

//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False
3 голосов
/ 27 июля 2014

Я далеко не специалист по JavaScript, но работает ли следующее?

if (Object.getOwnPropertyNames(d).length == 0) {
   // object is empty
}

Преимущество этого метода в том, что он является вызовом функции из одной строки.

1 голос
/ 06 января 2017

Если производительность не учитывается, это простой метод, который легко запомнить:

JSON.stringify(obj) === '{}'

Очевидно, что вы не хотите, чтобы в цикле выстраивались крупные объекты.

1 голос
/ 23 декабря 2015
var SomeDictionary = {};
if(jQuery.isEmptyObject(SomeDictionary))
// Write some code for dictionary is empty condition
else
// Write some code for dictionary not empty condition

Это прекрасно работает.

1 голос
/ 20 мая 2011

Вы должны проверить, что это был тип 'объект', например, так:

(typeof(d) === 'object')

А затем реализовать короткую функцию 'size', чтобы проверить, что она пуста, , как упоминалось здесь .

0 голосов
/ 08 января 2012

Если вы попробуете это на Node.js, используйте этот фрагмент, основываясь на этом коде здесь

Object.defineProperty(Object.prototype, "isEmpty", {
    enumerable: false,
    value: function() {
            for (var prop in this) if (this.hasOwnProperty(prop)) return false;
            return true;
        }
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...