JavaScript从数组中删除空元素

3

我有一个数组,长这样:

var testArray = [
    {"cid": "1234567"},
    {"cid": "892345"},
    {"cid": ""},
    {"cid": "8267783"},
    {},
    {"cid": "096873"},
];

我该如何在 for 循环之前或循环时删除 cid = "" 且为空的 {} ?

我尝试了以下代码:

for(var i = 0; testArray.length; i++){

    if(testArray.cid && testArray.cid != ""){

    }

}

这个似乎不起作用 :-/ 出现了以下错误:无法从未定义的变量中读取 "cid" 属性

希望这能让您明白,提前感谢 :-)


你只是缺少了 if( testArray[i].cid ) 项的 index - bird
5个回答

4
使用filter()来过滤掉不需要的数据。

var testArray = [
    {"cid": "1234567"},
    {"cid": "892345"},
    {"cid": ""},
    {"cid": "8267783"},
    {},
    {"cid": "096873"},
];
console.log(testArray.filter(arr => arr.cid))


你的代码将删除具有 cidtrue0undefinednull 的对象。而 OP 只要求 '' - Maheer Ali
太好了,但是以防万一...有没有一种方法可以在不使用过滤器的情况下完成这个任务? - Mansa
@Mansa 看看我的答案,我也展示了使用简单循环和 filter() 的方法。 - Maheer Ali

3
如果您需要移除所有空值(包括 "", null, undefined 和 0):
arr = arr.filter(function(e){return e}); 

移除空值和换行符:

arr = arr.filter(function(e){ return e.replace(/(\r\n|\n|\r)/gm,"")});

例子

arr = ["hello","",null,undefined,1,100," "]  
arr.filter(function(e){return e});

返回
["hello", 1, 100, " "]

2
当您在循环过程中使用splice()时,需要将i减少1。使用filter()是更好的方法。下面我展示了两种方法。检查空对象{}应该将Object.key(obj).length0进行比较。

var testArray = [
    {"cid": "1234567"},
    {"cid": "892345"},
    {"cid": ""},
    {"cid": "8267783"},
    {},
    {"cid": "096873"},
];
//doesnot mutates the original array.
let result = testArray.filter(x => Object.keys(x).length !== 0 && x.cid !== '');

//original array will be change after this loop
for(let i = 0;i<testArray.length;i++){
  if(Object.keys(testArray[i]).length ===0 || testArray[i].cid === ''){
    testArray.splice(i,1);
    i--;
  }
}
console.log(testArray)
console.log(result);


2

var testArray = [
    {"cid": "1234567"},
    {"cid": "892345"},
    {"cid": ""},
    {"cid": "8267783"},
    {},
    {"cid": "096873"},
];

testArray = testArray.filter(item=> Object.keys(item).length && item["cid"]);
console.log(testArray)


0

刚刚添加了一个完整性的帖子过滤函数。顺便支持一下HolyDragon。

var testArray = [
    {"cid": "1234567"},
    {"cid": "892345"},
    {"cid": ""},
    {"cid": "8267783"},
    {},
    {"cid": "096873"},
];

testArray.filter(i => i.cid)
         .forEach(elem => {
  // do my code post filter
  console.log(elem.cid);
});


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接