我有一个看起来像这样的数组:
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”
希望这是有道理的,并预先感谢:-)
答案 0 :(得分:4)
使用filter()过滤掉不需要的数据。
var testArray = [
{"cid": "1234567"},
{"cid": "892345"},
{"cid": ""},
{"cid": "8267783"},
{},
{"cid": "096873"},
];
console.log(testArray.filter(arr => arr.cid))
答案 1 :(得分: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, " "]
答案 2 :(得分:2)
在循环中何时使用splice()
。您需要将i
减少1
使用filter()
的更好方法。下面我展示了两种方法。
为了检查空对象{}
,您应该将Object.key(obj).length
与0
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);
答案 3 :(得分: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)
答案 4 :(得分:0)
只是为了完整性而添加了后置过滤器功能。为HolyDragon tho投票。
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);
});