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”

希望这是有道理的,并提前感谢:-)

4

5 回答 5

4

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

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

于 2019-03-05T06:42:44.167 回答
3

如果您需要删除所有空值(“”、null、未定义和 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, " "]
于 2019-03-05T06:51:55.777 回答
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);

于 2019-03-05T06:47:46.920 回答
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)

于 2019-03-05T06:51:31.590 回答
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);
});

于 2019-03-05T06:56:53.917 回答