JavaScript 如何指定删除数组元素

2018 年 9 月 19 日
 jtsai
var l1 = ['a','b','c','d','e']
var l2 = ['a','c','e']

// 在一个循环里面,能把 l1 变成 ['b','d'] 吗?

1740 次点击
所在节点    问与答
7 条回复
plqws
2018 年 9 月 19 日
一个循环?楼主要用 JS 做百万并发吗
jtsai
2018 年 9 月 19 日
```
var l1 = ['a','b','c','d','e']
var l2 = ['a','c','e']

for (let i of l1) {
if (l2.indexOf(i) !== -1) {
l1.splice(l1.indexOf(i) ,1)
}
}

console.log(l1) // ['b', 'd']

// 我把帖子发上来就成功了
```
MoozLee
2018 年 9 月 19 日
_.pullAll() ?
wd
2018 年 9 月 19 日
你觉得 indexof 的复杂度多少?
bzw875
2018 年 9 月 19 日
l1.filter(function(tmp){
return l2.indexOf(tmp) === -1;
});
leekafai
2018 年 9 月 20 日
@jtsai 你的写法有问题,下标是单调递增的,你在循环里面改动数组长度,元素位置会变动,你试试
```
var l1 = ['a','b','c','d','e,'a','c','a']
```
就可以复现问题了。
最好不要在循环里面去变动数组元素的位置。
@bzw875 的方法比较好。
jtsai
2018 年 9 月 20 日
@leekafai 其实我的业务是一个数组对应多个数组要删除掉数据。filter 不太好用,不过我换其他方式解决了。

就是单纯的对这个问题 https://v2ex.xtra.eu.org/t/490821 疑惑,见 4 楼

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

https://v2ex.xtra.eu.org/t/490787

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

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

© 2021 V2EX