ZeroShiro
V2EX  ›  问与答

大佬们,问过 JS 的小问题

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