V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ZeroShiro
V2EX  ›  问与答

大佬们,问过 JS 的小问题

  •  
  •   ZeroShiro · Jul 24, 2020 · 2854 views
    This topic created in 2109 days ago, the information mentioned may be changed or developed.
    let a = [1, 2, 3, 4];
    let b = [
      {
        obj: {
          id: 1,
          lock: false,
        },
      },
      {
        obj: {
          id: 2,
          lock: false,
        },
      },
    ];
    

    b 的 id 在 a 中出现了就改为 true
    解的方法就套娃 有没有更好的解法

    19 replies    2020-07-24 21:43:40 +08:00
    yigemeirenyongde
        1
    yigemeirenyongde  
       Jul 24, 2020
    Number(true) Number(item.id) ?
    otakustay
        2
    otakustay  
       Jul 24, 2020
    b.filter(o => a.includes(o.obj.id)).forEach(o => o.obj.lock = true)
    这样子?
    ZeroShiro
        3
    ZeroShiro  
    OP
       Jul 24, 2020
    是 lock 改为 true
    TomatoYuyuko
        4
    TomatoYuyuko  
       Jul 24, 2020
    数据不复杂而且特征明显的话,直接转字符串正则或者转数组切分取出 id,includes 一遍就出来了
    不过还是套娃可读性高
    BreadKiller
        5
    BreadKiller  
       Jul 24, 2020   ❤️ 1
    b.forEach(o=>a.includes(o.obj.id)&&(o.obj.lock = true))
    easonHHH
        6
    easonHHH  
       Jul 24, 2020
    for(let {obj} of b.values()){
    obj.lock=a.includes(obj.id)
    }
    ZeroShiro
        7
    ZeroShiro  
    OP
       Jul 24, 2020
    @BreadKiller 这样 ok 感谢大佬
    heasy
        8
    heasy  
       Jul 24, 2020   ❤️ 4
    b.map(item => item.obj.lock = a.includes(item.obj.id))
    ZeroShiro
        9
    ZeroShiro  
    OP
       Jul 24, 2020
    let a = [1, 2, 3, 4];
    let b = [
    {
    obj: {
    children: [
    {
    id: 1,
    lock: true,
    },
    {
    id: 2,
    lock: true,
    },
    ],
    },
    },
    ];
    。。。
    ZeroShiro
        10
    ZeroShiro  
    OP
       Jul 24, 2020
    😂 升级了
    Vegetable
        11
    Vegetable  
       Jul 24, 2020
    写个递归,a 改成 Set,应该就没什么可做的了。
    hitaoguo
        12
    hitaoguo  
       Jul 24, 2020
    b.forEach(({obj})=> obj.lock = a.includes(obj.id))
    sima675
        13
    sima675  
       Jul 24, 2020
    b 改成对象就好了嘛
    Torpedo
        14
    Torpedo  
       Jul 24, 2020
    @otakustay 之前刷 leetcode 的时候,不能直视这么函数式的代码了
    zzuieliyaoli
        15
    zzuieliyaoli  
       Jul 24, 2020
    @heasy 这个好,没副作用
    MMZZ
        16
    MMZZ  
       Jul 24, 2020
    b.map(item => {
    return {
    obj: {
    id: item.obj.id,
    lock: a.includes(item.obj.id) ? true : false
    }
    }
    })
    前面都不太行吧?
    heasy
        17
    heasy  
       Jul 24, 2020
    @MMZZ includes 方法用来判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false 。
    auroraccc
        18
    auroraccc  
       Jul 24, 2020
    b.map(ele => ({obj: {...ele.obj, lock: a.includes(ele.obj.id)}}))
    otakustay
        19
    otakustay  
       Jul 24, 2020
    @MMZZ 是不是要 mutate 原来的对象这就是一个纯需求的事了,要的就 forEach,不要的就 map
    要用 map 的话,b.map(({obj}) => ({obj: {...obj, lock: a.includes(obj.id)}}))多漂亮(个屁)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2363 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 57ms · UTC 10:32 · PVG 18:32 · LAX 03:32 · JFK 06:32
    ♥ Do have faith in what you're doing.