const list = [ {"className": "花花5555", "gradeName": "毕业班"}, {"className": "中ei班", "gradeName": "毕业班"}, {"className": "花花班5", "gradeName": "小班"}, {"className": "花花", "gradeName": "大班"}, {"className": "花花班", "gradeName": "中班"}, {"className": "苹果班", "gradeName": "大班"}, {"className": "呃呃呃", "gradeName": "中班"}, {"className": "中二班", "gradeName": "毕业班"}, {"className": "大一班", "gradeName": "大班"}, {"className": "大一班1", "gradeName": "毕业班"}, {"className": "中一班", "gradeName": "毕业班"} ]
for (let i = 0; i < list.length; i++) { if (list[i].gradeName === '毕业班') { list.splice(i, 1) } }
console.log(JSON.stringify(list))
打印结果:[{"className":"中ei班","gradeName":"毕业班"},
{"className":"花花班5","gradeName":"小班"},
{"className":"花花","gradeName":"大班"},
{"className":"花花班","gradeName":"中班"},
{"className":"苹果班","gradeName":"大班"},
{"className":"呃呃呃","gradeName":"中班"},
{"className":"大一班","gradeName":"大班"},
{"className":"中一班","gradeName":"毕业班"}
]
发现gradeName为‘毕业班’的元素还有,这是为什么呢?
通过分析数组知道了:for循环依次进行,每次都在加1,即时数组改变,也是加1,
当i为0时,发现gradename为‘毕业班’,于是删除,数组改变了,
继续i为1时,实际上,是删除后新数组的第二个元素,也就是原数组的第三个元素,通过这可以发现,跳过了原数组的第二个元素,导致没有被循环出来,被遗忘了!
解决方案:
for (let i = 0; i < list.length; i++) { if (list[i].gradeName === '毕业班') { list.splice(i, 1) i = i - 1 //满足条件时不要跳过下一个元素 } }
console.log(JSON.stringify(list))
打印结果:
[{"className":"花花班5","gradeName":"小班"},{"className":"花花","gradeName":"大班"},{"className":"花花班","gradeName":"中班"},{"className":"苹果班","gradeName":"大班"},{"className":"呃呃呃","gradeName":"中班"},{"className":"大一班","gradeName":"大班"}]
gradeName为‘毕业班’的都被过滤掉了!
让splice小坑了一下!、、、