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

JS 这几句能连一起写吗?

  •  
  •   coolair · 2022-07-21 10:37:00 +08:00 · 1907 次点击
    这是一个创建于 857 天前的主题,其中的信息可能已经有所发展或是发生改变。
    const {a, b, c, d, e, f, g, h} = anObject
    
    let newObject = {a, b, c, d, e, f, g, h}
    
    callFunc({...newObject})
    

    因为 a, b, c, d, e, f, g, h 这几个变量很长,有没有好的写法?

    第 1 条附言  ·  2022-07-21 11:20:12 +08:00
    lodash pick 好用,谢谢。
    17 条回复    2022-07-22 00:11:19 +08:00
    yunying
        1
    yunying  
       2022-07-21 10:38:22 +08:00
    callFunc({... anObject})
    coolair
        2
    coolair  
    OP
       2022-07-21 10:39:28 +08:00
    @yunying anObject 还有其他属性不需要的
    murmur
        3
    murmur  
       2022-07-21 10:40:10 +08:00
    const {
    aaaaaaaaaaaaaaaaaaaaaaa,
    bbbbbbbbbbbbbbbbbbbbbb,
    ccccccccccccccccccccccccccc,
    dddddddddddddddddddddd
    } = anObject
    mxT52CRuqR6o5
        4
    mxT52CRuqR6o5  
       2022-07-21 10:43:29 +08:00
    原生 js (感觉怎么样都要写很多)
    callFunc(Object.fromEntries(Object.entries(anObject).filter(([key])=>['a','b','c','d','e','f','g','h'].includes(key))))

    lodash 之类的工具库
    callFunc(_.pick(anObject,['a','b','c','d','e','f','g','h']))
    bojackhorseman
        5
    bojackhorseman  
       2022-07-21 10:44:02 +08:00
    @coolair #2 那就用别名吧
    ```js
    const { veryLongVariable: a, ... } = obj
    ```
    yunying
        6
    yunying  
       2022-07-21 10:44:05 +08:00
    @coolair 看下 loadash 有没有用得上的函数吧。
    acthtml
        7
    acthtml  
       2022-07-21 10:44:12 +08:00   ❤️ 1
    lodash pick function

    const newObj = _.pick(obj, [keyA, keyB])
    Liam1997
        8
    Liam1997  
       2022-07-21 10:45:25 +08:00
    lodash pick
    rrfeng
        9
    rrfeng  
       2022-07-21 10:48:11 +08:00
    可以反过来写,把不要的列出来?
    shyling
        10
    shyling  
       2022-07-21 10:54:30 +08:00
    没懂意思。。。一般来说 callFunc 不怕 object 多参数的吧?
    Vegetable
        11
    Vegetable  
       2022-07-21 10:57:44 +08:00
    你参数是一个 obj ,他参数多就多呗。你这么写也做不到 deepcopy ,...都多余
    libook
        12
    libook  
       2022-07-21 10:58:00 +08:00   ❤️ 1
    换行写就行,挺清晰的。

    因为 git 是按行检查的,所以为了在增删改选取属性时能让 git 记录精确一些,我习惯在这种情况下换行写,如:

    const {
    a,
    b,
    } = anObject;

    如果想加个 c 只需要加一行,git 提交记录只会显示添加了一行 c ,不会显示整行有修改,这样更清晰一些。
    Vegetable
        13
    Vegetable  
       2022-07-21 10:58:18 +08:00
    *属性
    lneoi
        14
    lneoi  
       2022-07-21 11:28:22 +08:00
    有种不太好看的写法,如果 anObject 中不需要的元素比较少,比如 f 后面只有 x,y 两个不要,可以写 const { x, y, ...newObject } = anObject
    然后取 newObject ,xy 没用到会有提示,用了什么数据也不明确。
    FrankFang128
        15
    FrankFang128  
       2022-07-21 15:17:46 +08:00
    lodash.pick(
    PrtScScrLk
        16
    PrtScScrLk  
       2022-07-21 16:50:39 +08:00
    说一个 pick 的反向操作 omit , 从对象里去掉一些属性,比直接 delete 好用点儿。
    aleen42
        17
    aleen42  
       2022-07-22 00:11:19 +08:00 via Android   ❤️ 1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2725 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:06 · PVG 18:06 · LAX 02:06 · JFK 05:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.