2012-12-20 75 views
15

我有一个这样的对象:检查对象为空的JavaScript/jQuery的

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

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

+0

你的问题问如何检查的对象是空的,但你的问题的身体询问如何检查数组是空的。请对未来的读者更具体。 – Jared

+0

[Is object empty?]可能重复(http://stackoverflow.com/questions/4994201/is-object-empty) – sierrasdetandil

回答

6

试试这个:

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是否存在,是一个数组,它不是空的。

+0

为什么不把所有三个检查放在一个大的,如果? –

2

试试这个实用的功能:

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; 
}; 
+0

isSet是什么? –

+0

对不起!:)这是另一个有用的功能:P – stamat

+0

非常感谢'isEmpty'功能 – terales

-2
if (ricHistory.name2 === undefined) { 
    //This is property has not been set (which is not really the same as empty though...) 
} 
56

您可以通过jQuery.isEmptyObject()

检查做到这一点,看看如果一个对象是空的(不包含属性)。

jQuery.isEmptyObject(object) 

例子:

function isSet(val) { return ((val != undefined) && (val != null));} 

我觉得它更容易刚刚返回语句的布尔代替:

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

from Jquery

0

您可以通过这样做,而不是缩短isSet交还,然后返回。

+0

这实际上是对此答案的评论http://stackoverflow.com/a/13973962/3810453 – Zanshin13

3

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

$.isEmptyObject(object) 
0

我去喜欢这一切的时候在我的代码:

假设我控制器返回象下面这样的东西:

$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'); 
} 
0

您也可以使用此object-empty可重用组件来确定obj参考是空的。

例子:

empty([]) // => true 
empty({}) // => true 
empty(1) // => false 
empty('') // => false 
empty('foo') // => true 

它是如何工作的:

function isEmpty(obj: any): boolean { 
    for (const n in obj) if (hasOwnProperty(obj, n) && obj[n]) return false; // eslint-disable-line 
    return true; 
};