大佬们,问过 JS 的小问题

2020-07-24 09:34:46 +08:00
 ZeroShiro
let a = [1, 2, 3, 4];
let b = [
  {
    obj: {
      id: 1,
      lock: false,
    },
  },
  {
    obj: {
      id: 2,
      lock: false,
    },
  },
];

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

2112 次点击
所在节点    问与答
19 条回复
yigemeirenyongde
2020-07-24 09:42:10 +08:00
Number(true) Number(item.id) ?
otakustay
2020-07-24 09:42:16 +08:00
b.filter(o => a.includes(o.obj.id)).forEach(o => o.obj.lock = true)
这样子?
ZeroShiro
2020-07-24 09:45:41 +08:00
是 lock 改为 true
TomatoYuyuko
2020-07-24 09:48:46 +08:00
数据不复杂而且特征明显的话,直接转字符串正则或者转数组切分取出 id,includes 一遍就出来了
不过还是套娃可读性高
BreadKiller
2020-07-24 09:50:58 +08:00
b.forEach(o=>a.includes(o.obj.id)&&(o.obj.lock = true))
easonHHH
2020-07-24 09:53:02 +08:00
for(let {obj} of b.values()){
obj.lock=a.includes(obj.id)
}
ZeroShiro
2020-07-24 09:56:47 +08:00
@BreadKiller 这样 ok 感谢大佬
heasy
2020-07-24 10:01:57 +08:00
b.map(item => item.obj.lock = a.includes(item.obj.id))
ZeroShiro
2020-07-24 10:02:35 +08:00
let a = [1, 2, 3, 4];
let b = [
{
obj: {
children: [
{
id: 1,
lock: true,
},
{
id: 2,
lock: true,
},
],
},
},
];
。。。
ZeroShiro
2020-07-24 10:05:27 +08:00
😂 升级了
Vegetable
2020-07-24 10:29:26 +08:00
写个递归,a 改成 Set,应该就没什么可做的了。
hitaoguo
2020-07-24 10:34:17 +08:00
b.forEach(({obj})=> obj.lock = a.includes(obj.id))
sima675
2020-07-24 10:42:39 +08:00
b 改成对象就好了嘛
Torpedo
2020-07-24 10:49:00 +08:00
@otakustay 之前刷 leetcode 的时候,不能直视这么函数式的代码了
zzuieliyaoli
2020-07-24 11:07:54 +08:00
@heasy 这个好,没副作用
MMZZ
2020-07-24 15:49:52 +08:00
b.map(item => {
return {
obj: {
id: item.obj.id,
lock: a.includes(item.obj.id) ? true : false
}
}
})
前面都不太行吧?
heasy
2020-07-24 19:46:09 +08:00
@MMZZ includes 方法用来判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 false 。
auroraccc
2020-07-24 19:48:58 +08:00
b.map(ele => ({obj: {...ele.obj, lock: a.includes(ele.obj.id)}}))
otakustay
2020-07-24 21:43:40 +08:00
@MMZZ 是不是要 mutate 原来的对象这就是一个纯需求的事了,要的就 forEach,不要的就 map
要用 map 的话,b.map(({obj}) => ({obj: {...obj, lock: a.includes(obj.id)}}))多漂亮(个屁)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/692706

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX