jtsai
V2EX  ›  问与答

JavaScript 如何指定删除数组元素

  •  
  •   jtsai · Sep 19, 2018 · 1731 views
    This topic created in 2818 days ago, the information mentioned may be changed or developed.
    var l1 = ['a','b','c','d','e']
    var l2 = ['a','c','e']
    
    // 在一个循环里面,能把 l1 变成 ['b','d'] 吗?
    
    
    7 replies    2018-09-20 11:45:47 +08:00
    plqws
        1
    plqws  
       Sep 19, 2018 via iPhone   ❤️ 1
    一个循环?楼主要用 JS 做百万并发吗
    jtsai
        2
    jtsai  
    OP
       Sep 19, 2018
    ```
    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
        3
    MoozLee  
       Sep 19, 2018   ❤️ 1
    _.pullAll() ?
    wd
        4
    wd  
       Sep 19, 2018 via iPhone   ❤️ 1
    你觉得 indexof 的复杂度多少?
    bzw875
        5
    bzw875  
       Sep 19, 2018   ❤️ 1
    l1.filter(function(tmp){
    return l2.indexOf(tmp) === -1;
    });
    leekafai
        6
    leekafai  
       Sep 20, 2018   ❤️ 1
    @jtsai 你的写法有问题,下标是单调递增的,你在循环里面改动数组长度,元素位置会变动,你试试
    ```
    var l1 = ['a','b','c','d','e,'a','c','a']
    ```
    就可以复现问题了。
    最好不要在循环里面去变动数组元素的位置。
    @bzw875 的方法比较好。
    jtsai
        7
    jtsai  
    OP
       Sep 20, 2018   ❤️ 1
    @leekafai 其实我的业务是一个数组对应多个数组要删除掉数据。filter 不太好用,不过我换其他方式解决了。

    就是单纯的对这个问题 https://www.v2ex.com/t/490821 疑惑,见 4 楼
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6055 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 03:17 · PVG 11:17 · LAX 20:17 · JFK 23:17
    ♥ Do have faith in what you're doing.