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

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

  •  
  •   black11black · 2020-11-11 07:02:31 +08:00 · 1287 次点击
    这是一个创建于 1478 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,求 JS 大佬指点。

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

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

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

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

    谢谢大家

    8 条回复    2020-11-11 09:39:12 +08:00
    newbieRenew
        1
    newbieRenew  
       2020-11-11 07:26:13 +08:00 via iPhone   ❤️ 3
    pop 500 次干嘛?直接 length=500 不就行了
    Cbdy
        2
    Cbdy  
       2020-11-11 07:36:56 +08:00 via Android
    @newbieRenew 一楼正解
    lichdkimba
        3
    lichdkimba  
       2020-11-11 07:49:34 +08:00
    slice 方法?
    christin
        4
    christin  
       2020-11-11 08:45:42 +08:00 via iPhone
    66beta
        5
    66beta  
       2020-11-11 09:03:23 +08:00 via Android   ❤️ 1
    就不能查一下 mdn 上 array 的文档吗?
    mascteen
        6
    mascteen  
       2020-11-11 09:06:32 +08:00
    function cut500(obj) {
    const result = {}
    for (const i in obj) {
    result[i] = obj[i].slice(0,500)
    }
    return result
    }
    yaphets666
        7
    yaphets666  
       2020-11-11 09:13:07 +08:00
    slice 就行 但是 slice 是创建了一个新的数组 这个性能不知道比直接 length=500 差还是怎么样
    yaphets666
        8
    yaphets666  
       2020-11-11 09:39:12 +08:00   ❤️ 3
    测试了一下 一千万长度的数组,如果只截取前 500 的话.slice 方法和直接 length=500 都在 1ms 内. 截取的越多,比如前 500 万个元素.length 的优势越大.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5665 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:41 · PVG 14:41 · LAX 22:41 · JFK 01:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.