Javascript删除数组中的空值

时间:2014-05-21 10:48:52

标签: javascript arrays

我的要求是删除数组中的空值。

我有一个类似于以下方式的数组

addresses = {
    status: true
    accounts: [6]
    0: {
        account_id: "100004069844270facebook"
        account_name: "Lal Mohan T"
        account_type: "facebook"
    } -
        1: {
            account_id: "bdc33d8ca941b8f00c2a4e046ba44761twitter"
            account_name: "Minu Jose"
            account_type: "twitter"
    } -
        2: {
            account_id: "ec466c09fd62993ade48c6c4bb8d2da7facebook"
            account_name: "Jijo John"
            account_type: "facebook"
    } -
        3: {
            account_id: "138115932930527facebook"
            account_name: "TVInfo AMT"
            account_type: "facebook"
    }
    4: {}
    5: {}
    6: {}
}

如何从此数组中删除{}元素。

我已经尝试了数组过滤器但它在我的情况下不起作用

 addresses = addresses .filter(function (n) { return n !== undefined });

请帮我解决这个问题,非常感谢您的帮助。谢谢

3 个答案:

答案 0 :(得分:1)

您既不处理null值也不处理undefined值。您似乎拥有一个包含其他对象的对象。其中一些包含的对象可能是空的,您需要明确检查:

Object.keys( addresses ).filter(function( v ) {
   return typeof addresses[ v ] !== 'object' || Object.keys( addresses[ v ] ).length !== 0;
});

答案 1 :(得分:1)

首先addresses没有数组,它是一个对象({} = object,[] = array)。

{}并不意味着undefined,而是一个空对象。最简单的方法是测试其空格是否在过滤方法中使用Object.keys()

function( value ) { return !(typeof value === "object" && Object.keys( value ).length === 0 ); }

答案 2 :(得分:1)

如果要从实际上不是帐户(但为空)的帐户中删除元素,则应测试帐户的属性而不是元素本身。

accounts = accounts.filter(function (n) { return n.account_id !== undefined });