black11black
V2EX  ›  问与答

JavaScript 中,想删除数组的最后 N 项(重复很多次),最快的方法是什么?

  •  
  •   black11black · Nov 11, 2020 · 1729 views
    This topic created in 2051 days ago, the information mentioned may be changed or developed.

    如题,求 JS 大佬指点。

    目前有一个对象,以下这种形式,共有大概一千个属性,每个属性对应一个长度为 1000 的数组

    let obj = {
        a: [1,2,3,4...],
        b: [9,10,11,...],
        ...
    }
    

    需求是将所有的属性,都只截取前 500 个,后 500 个不要了。

    最快的方法是什么,是应该重复 pop 500 次?或者是干脆新建一个数组重新 push 进去?不希望这步操作吃性能。

    谢谢大家

    8 replies    2020-11-11 09:39:12 +08:00
    newbieRenew
        1
    newbieRenew  
       Nov 11, 2020 via iPhone   ❤️ 3
    pop 500 次干嘛?直接 length=500 不就行了
    Cbdy
        2
    Cbdy  
       Nov 11, 2020 via Android
    @newbieRenew 一楼正解
    lichdkimba
        3
    lichdkimba  
       Nov 11, 2020
    slice 方法?
    christin
        4
    christin  
       Nov 11, 2020 via iPhone
    66beta
        5
    66beta  
       Nov 11, 2020 via Android   ❤️ 1
    就不能查一下 mdn 上 array 的文档吗?
    mascteen
        6
    mascteen  
       Nov 11, 2020
    function cut500(obj) {
    const result = {}
    for (const i in obj) {
    result[i] = obj[i].slice(0,500)
    }
    return result
    }
    yaphets666
        7
    yaphets666  
       Nov 11, 2020
    slice 就行 但是 slice 是创建了一个新的数组 这个性能不知道比直接 length=500 差还是怎么样
    yaphets666
        8
    yaphets666  
       Nov 11, 2020   ❤️ 3
    测试了一下 一千万长度的数组,如果只截取前 500 的话.slice 方法和直接 length=500 都在 1ms 内. 截取的越多,比如前 500 万个元素.length 的优势越大.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3037 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 83ms · UTC 13:30 · PVG 21:30 · LAX 06:30 · JFK 09:30
    ♥ Do have faith in what you're doing.