coolair
V2EX  ›  问与答

JS 这几句能连一起写吗?

  •  
  •   coolair · Jul 21, 2022 · 2674 views
    This topic created in 1418 days ago, the information mentioned may be changed or developed.
    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 这几个变量很长,有没有好的写法?

    Supplement 1  ·  Jul 21, 2022
    lodash pick 好用,谢谢。
    17 replies    2022-07-22 00:11:19 +08:00
    yunying
        1
    yunying  
       Jul 21, 2022
    callFunc({... anObject})
    coolair
        2
    coolair  
    OP
       Jul 21, 2022
    @yunying anObject 还有其他属性不需要的
    murmur
        3
    murmur  
       Jul 21, 2022
    const {
    aaaaaaaaaaaaaaaaaaaaaaa,
    bbbbbbbbbbbbbbbbbbbbbb,
    ccccccccccccccccccccccccccc,
    dddddddddddddddddddddd
    } = anObject
    mxT52CRuqR6o5
        4
    mxT52CRuqR6o5  
       Jul 21, 2022
    原生 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']))
    dumbass
        5
    dumbass  
       Jul 21, 2022
    @coolair #2 那就用别名吧
    ```js
    const { veryLongVariable: a, ... } = obj
    ```
    yunying
        6
    yunying  
       Jul 21, 2022
    @coolair 看下 loadash 有没有用得上的函数吧。
    acthtml
        7
    acthtml  
       Jul 21, 2022   ❤️ 1
    lodash pick function

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

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

    const {
    a,
    b,
    } = anObject;

    如果想加个 c 只需要加一行,git 提交记录只会显示添加了一行 c ,不会显示整行有修改,这样更清晰一些。
    Vegetable
        13
    Vegetable  
       Jul 21, 2022
    *属性
    lneoi
        14
    lneoi  
       Jul 21, 2022
    有种不太好看的写法,如果 anObject 中不需要的元素比较少,比如 f 后面只有 x,y 两个不要,可以写 const { x, y, ...newObject } = anObject
    然后取 newObject ,xy 没用到会有提示,用了什么数据也不明确。
    FrankFang128
        15
    FrankFang128  
       Jul 21, 2022
    lodash.pick(
    PrtScScrLk
        16
    PrtScScrLk  
       Jul 21, 2022
    说一个 pick 的反向操作 omit , 从对象里去掉一些属性,比直接 delete 好用点儿。
    aleen42
        17
    aleen42  
       Jul 22, 2022 via Android   ❤️ 1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1117 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 18:02 · PVG 02:02 · LAX 11:02 · JFK 14:02
    ♥ Do have faith in what you're doing.