[英]Working with empty objects in javascript array
我有一个数组数组,我试图从中提取值。 问题是,当我遇到一个空数组时,我得到了一个未定义的错误。
这是我正在使用的数组:
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);
}
}
}
console.log看起来像:
null
testval
Error: data[i][0] is undefined
因此,当到达第一个[]时,它将中断。 如何在for循环之前删除所有空数组? 还是让for循环遇到空数组时不死? 任何帮助表示赞赏。 谢谢。
您可以简单地检查当前项目是否为空:
if (data[i].length === 0) continue;
只是想将其添加为答案。在javascript中,我相信null == false
。 因此,您还可以执行以下操作:
if(data[i][0])
//it's not null or undefined, do some work
您需要确保data [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);
}
}
}
for (var i = 0; i < data.length; i++) {
if (data[i].length !== 0) continue;
if (data[i][0].myvar) {
dep = data[i][0].myvar;
if (dep != null) {
myarr.push(dep);
}
}
}
这是最好,最干净的方法。
data.forEach(function(e){
if(Object.keys(e).length) myarr.push(e);
});
看一下 http://jsfiddle.net/8zfZd/打开控制台以查看对象。
使它更短...
data.forEach(function(e){ (e[0]) && myarr.push(e); });
在循环之前添加以下循环以清除空数组:
var i = 0;
while (true) {
if (i == data.length)
break;
if (data[i].length == 0)
data.splice(i, 1);
else
++i;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.