JavaScript 数组问题

2018-09-19 14:36:26 +08:00
 jtsai

水平实在有限,实在搞不懂下面这个问题,求指点迷津!

前置问题 [ 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 如何指定删除数组元素

1070 次点击
所在节点    问与答
7 条回复
jtsai
2018-09-19 14:39:22 +08:00
```
// 有时返回的组合也可能是这样的

// 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]

// 不明白错在哪里
```
littlewin
2018-09-19 14:45:33 +08:00
for 循环遍历过程中,改变原数组,后续的元素下标都变了
jtsai
2018-09-19 14:46:40 +08:00
@littlewin 嗯,所有如何才能指定删除数组元素
jtsai
2018-09-19 14:49:29 +08:00
@littlewin 下标变了,下个循环的 indexOf 获取的值理论上也变了,因为是动态的,我想得比较美好。而且他这个情况,有的数据正常,有的不正常,真的超出我的理解范围。不过如果能直接也我解决办法,我们也可以忽略其他问题,蟹蟹
heimeil
2018-09-19 14:50:07 +08:00
你需要一个新数组去保留需要的元素,而不是去改变正在迭代的原数组
littlewin
2018-09-19 14:50:58 +08:00
笨办法就增加个中间变量用于遍历咯

其实可以参考下 lodash 的 difference 方法
https://lodash.com/docs/4.17.10#difference
doublelam
2018-09-21 16:31:37 +08:00
const removeOne = (index, array) => array.slice(0, index).concat(array.slice(index + 1));

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/490821

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX