V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jtsai
V2EX  ›  问与答

JavaScript 如何指定删除数组元素

  •  
  •   jtsai · 2018-09-19 13:15:42 +08:00 · 1394 次点击
    这是一个创建于 2257 天前的主题,其中的信息可能已经有所发展或是发生改变。
    var l1 = ['a','b','c','d','e']
    var l2 = ['a','c','e']
    
    // 在一个循环里面,能把 l1 变成 ['b','d'] 吗?
    
    
    7 条回复    2018-09-20 11:45:47 +08:00
    plqws
        1
    plqws  
       2018-09-19 13:20:19 +08:00 via iPhone   ❤️ 1
    一个循环?楼主要用 JS 做百万并发吗
    jtsai
        2
    jtsai  
    OP
       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
        3
    li746224  
       2018-09-19 13:29:14 +08:00   ❤️ 1
    _.pullAll() ?
    wd
        4
    wd  
       2018-09-19 13:30:52 +08:00 via iPhone   ❤️ 1
    你觉得 indexof 的复杂度多少?
    bzw875
        5
    bzw875  
       2018-09-19 14:48:24 +08:00   ❤️ 1
    l1.filter(function(tmp){
    return l2.indexOf(tmp) === -1;
    });
    leekafai
        6
    leekafai  
       2018-09-20 11:40:42 +08:00   ❤️ 1
    @jtsai 你的写法有问题,下标是单调递增的,你在循环里面改动数组长度,元素位置会变动,你试试
    ```
    var l1 = ['a','b','c','d','e,'a','c','a']
    ```
    就可以复现问题了。
    最好不要在循环里面去变动数组元素的位置。
    @bzw875 的方法比较好。
    jtsai
        7
    jtsai  
    OP
       2018-09-20 11:45:47 +08:00   ❤️ 1
    @leekafai 其实我的业务是一个数组对应多个数组要删除掉数据。filter 不太好用,不过我换其他方式解决了。

    就是单纯的对这个问题 https://www.v2ex.com/t/490821 疑惑,见 4 楼
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2516 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:32 · PVG 10:32 · LAX 18:32 · JFK 21:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.