28

我有一个这样的对象:

ricHistory = {
  name1: [{
    test1: value1,
    test2: value2,
    test3: value3
  }],
  name2: [{
    test1: value1,
    test2: value2,
    test3: value3
  }]
};

现在我想用 Javascript/jQuery 检查例如 name2 是否为空。我知道方法hasOwnProperty。它data.hasOwnProperty('name2')仅适用于名称是否存在,但我必须检查它是否为空。

4

7 回答 7

75

你可以这样做jQuery.isEmptyObject()

检查对象是否为空(不包含属性)。

jQuery.isEmptyObject( object )

例子:

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

来自 jQuery

于 2012-12-20T14:10:18.153 回答
14

JQuery 的另一种语法是您没有使用 Prototype 或类似的语法,您更喜欢使用 $ 而不是 jQuery 前缀;

$.isEmptyObject( object )
于 2016-04-06T08:24:08.847 回答
9

试试这个:

if (ricHistory.name2 && 
    ricHistory.name2 instanceof Array &&
    !ricHistory.name2.length) {
   console.log('name2 is empty array');
} else {
   console.log('name2 does not exists or is not an empty array.');
}

上面的解决方案将显示richHistory.name2 是否存在,是一个数组并且它不为空。

于 2012-12-20T14:10:05.870 回答
5

试试这个有用的功能:

function isEmpty(obj) {
if(isSet(obj)) {
    if (obj.length && obj.length > 0) { 
        return false;
    }

    for (var key in obj) {
        if (hasOwnProperty.call(obj, key)) {
            return false;
        }
    }
}
return true;    
};

function isSet(val) {
if ((val != undefined) && (val != null)){
    return true;
}
return false;
};
于 2012-12-20T14:09:12.443 回答
2

我在我的代码中总是这样:

假设我的控制器返回如下内容:

$return['divostar'] = $this->report->get_additional_divostar_report($data);
$return['success'] = true;
return response()->json($return);

在 Jquery 中,我会检查如下:

if (jQuery.isEmptyObject(data.divostar)){
      html_result = "<p id='report'>No report yet</p>";
      $('#no_report_table').html(html_result).fadeIn('fast');
} 
于 2017-05-04T12:24:25.113 回答
1

肮脏但简单且有效:

function isEmptyObject(obj) {
  return JSON.stringify(obj) == '{}';
}
于 2018-09-10T16:05:18.653 回答
-2
if (ricHistory.name2 === undefined) {
   //This is property has not been set (which is not really the same as empty though...)
}
于 2012-12-20T14:09:46.813 回答