JavaScript 如何指定删除数组元素

2018-09-19 13:15:42 +08:00
 jtsai
var l1 = ['a','b','c','d','e']
var l2 = ['a','c','e']

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

1394 次点击
所在节点    问与答
7 条回复
plqws
2018-09-19 13:20:19 +08:00
一个循环?楼主要用 JS 做百万并发吗
jtsai
2018-09-19 13:22:03 +08:00
```
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']

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

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

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

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

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

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

© 2021 V2EX