前端js,怎么删除数组中的其中一个对象?
删掉所有的{cc:"",cd:""}letarr=[{ab:"",ac:"",c:[{cc:"1",cd:"2"},{cc:"",cd:""},{cc:"",cd:""}...
删掉所有的 {cc:"",cd:""}
let arr = [
{
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"",cd:""},
{cc:"",cd:""},
]
},
{
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"1",cd:""},
{cc:"",cd:""},
]
}, {
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"",cd:""},
{cc:"",cd:"2"},
]
},
]
for (var i = 0; i < arr.length; i++) {
for (var g = 0; g < arr[i].c.length; g++) {
if (arr[i].c[g].cc == "" && arr[i].c[g].cd == "") {
arr[i].c.splice(g,1)
}
}
}
console.log(arr);
怎么不能把所有的 {cc:"",cd:""} 都删掉? 展开
let arr = [
{
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"",cd:""},
{cc:"",cd:""},
]
},
{
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"1",cd:""},
{cc:"",cd:""},
]
}, {
ab: "",
ac: "",
c:[
{cc:"1",cd:"2"},
{cc:"",cd:""},
{cc:"",cd:"2"},
]
},
]
for (var i = 0; i < arr.length; i++) {
for (var g = 0; g < arr[i].c.length; g++) {
if (arr[i].c[g].cc == "" && arr[i].c[g].cd == "") {
arr[i].c.splice(g,1)
}
}
}
console.log(arr);
怎么不能把所有的 {cc:"",cd:""} 都删掉? 展开
2个回答
展开全部
把
for (var g = 0; g < arr[i].c.length; g++) {
改成
for (var g = arr[i].c.length-1; g >=0; g--) {
就正常了
原因就在于,如果从头开始循环,遇到连续两个需要删除的元素时,删掉第一个,下一个元素就自动顶上来代替已删除的元素位置,然后程序再一次循环时,就会跳过这个元素而去处理下下个元素,这样就会造成删除不全的情况了。
解决的办法就是从后面往前面删,就可以完美避免上面的问题。
for (var g = 0; g < arr[i].c.length; g++) {
改成
for (var g = arr[i].c.length-1; g >=0; g--) {
就正常了
原因就在于,如果从头开始循环,遇到连续两个需要删除的元素时,删掉第一个,下一个元素就自动顶上来代替已删除的元素位置,然后程序再一次循环时,就会跳过这个元素而去处理下下个元素,这样就会造成删除不全的情况了。
解决的办法就是从后面往前面删,就可以完美避免上面的问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询