使用javascript数组中的空对象

使用javascript数组中的空对象,javascript,arrays,Javascript,Arrays,我有一个数组,试图从中提取值。问题是,当它碰到一个空数组时,我得到一个未定义的错误 以下是我正在使用的阵列: data = [[Object { myvar=null}], [Object { myvar="testval"}], [], [], []] 下面是我用来获取所有myvar值的javascript: myarr = []; for (var i = 0; i < data.length; i++) { console.log(data[i][0].myvar);

我有一个数组,试图从中提取值。问题是,当它碰到一个空数组时,我得到一个未定义的错误

以下是我正在使用的阵列:

 data = [[Object { myvar=null}], [Object { myvar="testval"}], [], [], []]
下面是我用来获取所有myvar值的javascript:

myarr = [];
for (var i = 0; i < data.length; i++) {
    console.log(data[i][0].myvar);
    if (data[i][0].myvar) {
        dep = data[i][0].myvar;
        if (dep != null) {
            myarr.push(dep);
        }
    }
}

因此,当它到达第一个[]时,它会断裂。如何在for循环之前删除所有空数组?或者,for循环在命中空数组时是否没有死亡?谢谢你的帮助。谢谢。

您只需检查当前项目是否为空:

if (data[i].length === 0) continue;

在循环之前添加此循环以清除空数组:

var i = 0;
while (true) {
    if (i == data.length)
        break;
    if (data[i].length == 0)
        data.splice(i, 1);
    else
        ++i;
}

我只是想加上这个作为答案。。在javascript中,我相信
null==false
。所以你也可以这样做:

if(data[i][0])
   //it's not null or undefined, do some work

您需要确保数据[i]是一个数组,并且它至少有1项:

var i, item, myarr = [],
    isNotEmptyArray = function(a) {
        return Object.prototype.toString.call(a) === '[object Array]' && a.length > 0;
    };

for (i = 0; i < data.length; i++) {
    item = data[i];
    if (isNotEmptyArray(item) && item[0].myvar) {
        console.log(item[0].myvar);
        dep = item[0].myvar;
        if (dep != null) {
            myarr.push(dep);
        }
    }
}
var i,项目,myarr=[],
isNotEmptyArray=函数(a){
返回Object.prototype.toString.call(a)='[Object Array]'&&a.length>0;
};
对于(i=0;i
用于(变量i=0;i
这是最好、最干净的方法

data.forEach(function(e){
    if(Object.keys(e).length) myarr.push(e);
});
查看打开控制台查看对象

为了让它更短

data.forEach(function(e){ (e[0]) && myarr.push(e); });

您能显示将空数组放在那里的代码吗?
data
数组中的第三个元素是空数组。因此,当到达
i=2
(第三个元素)时,
数据[i]
为空。因此,这里没有'data[i][0]检查我的答案,它甚至会检查空对象和数组,而不是最短的。我很确定您声明数据数组的语法是错误的。你没有放置对象{..}。为什么循环两次?您可以检查
if(data[i].length==0)
loop@matewkaOP特别要求在for循环之前删除空对象。我提供的代码经过测试,是正确的。尽管他问了,但这并不意味着它是正确的。我想你可以提出一个比执行OP请求更好的答案。“马特瓦卡好,但是考虑到OP显然不知道如何删除数组中的元素,所以即使他在这个特殊的情况下不使用它,答案也可能对他有价值。在这种情况下,它是!==0谢谢你。既然你可以用
data.forEach(函数(e){(e[0])&&myarr.push(e);})得到同样的结果,为什么还要创建这样一个怪物呢data.forEach(function(e){
    if(Object.keys(e).length) myarr.push(e);
});
data.forEach(function(e){ (e[0]) && myarr.push(e); });