水平实在有限,实在搞不懂下面这个问题,求指点迷津!
前置问题 [ JavaScript 如何指定删除数组元素] https://www.v2ex.com/t/490787
// 1
var l1 = [1,2,3,4,5]
var l2 = [1,3,5]
for (let i of l1) {
if (l2.indexOf(i) !== -1) { // 我们过滤掉 [1,3,5]
l1.splice(l1.indexOf(i) ,1)
}
}
console.log(l1) // 得出 [2,4] | 非常好,完全正确
// 2
var l1 = [1,2,3,4,5]
var l2 = [1,3,5]
for (let i of l1) {
if (l2.indexOf(i) === -1) { // 我们过滤掉 [2,4]
l1.splice(l1.indexOf(i) ,1)
}
}
console.log(l1) // 得出 [1,3,5] | 非常好,完全正确
// 3
var l1 = [1,2,3,4,5]
var l2 = [3,4]
for (let i of l1) {
if (l2.indexOf(i) === -1) { // 我们过滤掉 [3,4]
l1.splice(l1.indexOf(i) ,1)
}
}
console.log(l1) // 得出 [ 2, 3, 4 ] | 整个人都不好了
// 3
var l1 = [1,2,3,4,5]
var l2 = [3,4]
for (let i of l1) {
if (l2.indexOf(i) !== -1) { // 我们过滤掉 [1,2,5]
l1.splice(l1.indexOf(i) ,1)
}
}
console.log(l1) // 得出 [ 1, 2, 4, 5 ] | 整个人都不好了
求 JavaScript 如何指定删除数组元素
1
jtsai OP ```
// 有时返回的组合也可能是这样的 // 1 var l1 = [1,2,3,4,5] var l2 = [2] for (let i of l1) { if (l2.indexOf(i) !== -1) { // 过滤掉 [2] l1.splice(l1.indexOf(i) ,1) } } console.log(l1) // 得出 [1,3,4,5] // 2 var l1 = [1,2,3,4,5] var l2 = [2] for (let i of l1) { if (l2.indexOf(i) === -1) { // 过滤掉 [1,3,4,5] l1.splice(l1.indexOf(i) ,1) } } console.log(l1) // 得出 [2,4] // 不明白错在哪里 ``` |
2
littlewin 2018-09-19 14:45:33 +08:00 1
for 循环遍历过程中,改变原数组,后续的元素下标都变了
|
4
jtsai OP @littlewin 下标变了,下个循环的 indexOf 获取的值理论上也变了,因为是动态的,我想得比较美好。而且他这个情况,有的数据正常,有的不正常,真的超出我的理解范围。不过如果能直接也我解决办法,我们也可以忽略其他问题,蟹蟹
|
5
heimeil 2018-09-19 14:50:07 +08:00 1
你需要一个新数组去保留需要的元素,而不是去改变正在迭代的原数组
|
6
littlewin 2018-09-19 14:50:58 +08:00 1
|
7
doublelam 2018-09-21 16:31:37 +08:00 1
const removeOne = (index, array) => array.slice(0, index).concat(array.slice(index + 1));
|