js 有什么优雅的方法可以在处理 json 数组的时候只改变其中一个键值对的值并且自动保留其他的键值对不变吗

2022-05-12 09:42:53 +08:00
 yuan321
let test=[
  {
    "id": 28620,
    "name": "茌平粉煤灰[Ⅱ级]",
    "dn": "掺合料"
  },
  {
    "id": 5941,
    "name": "粉煤灰[Ⅰ 级]",
    "dn": "掺合料"
  },
  {
    "id": 5226,
    "name": "粉煤灰[Ⅱ级]",
    "dn": "掺合料"
  }]
  //需求是只改变 dn 为其他
  //改变后值为
  test=[
  {
    "id": 28620,
    "name": "茌平粉煤灰[Ⅱ级]",
    "dn": "其他"
  },
  {
    "id": 5941,
    "name": "粉煤灰[Ⅰ 级]",
    "dn": "其他"
  },
  {
    "id": 5226,
    "name": "粉煤灰[Ⅱ级]",
    "dn": "其他"
  }]
 // 这是我用到的方法
  test=test.map((item)=>({
    'id':item.id,
    'name':item.name,
    'dn':'其他'
  }))
  //这种方法是可行但是不优雅,因为就为了改变一个值还要把其他的也写上,有什么更好的方法实现吗?
3412 次点击
所在节点    JavaScript
28 条回复
rehoni
2022-05-12 13:59:24 +08:00
楼主写的有点啰嗦,map 和 forEach 是可以简写的,楼上已经有很多例子了。。而且我感觉会用 map 应该就会用 foreach 才对啊。。
Envov
2022-05-12 14:06:31 +08:00
@yaphets666 这个代码其实性能蛮好,但是搞习惯了 immutable 看这个真的难受
yuan321
2022-05-12 14:17:38 +08:00
@huai 居然还可以这样子用 map 。。。
yuan321
2022-05-12 14:18:18 +08:00
@huai 完全没有理解到 map 的精髓
yaphets666
2022-05-12 14:33:36 +08:00
@Envov 其实注意到这种事情就 ok
mybyons
2022-05-12 17:55:21 +08:00
看到了我的家乡 茌平 估计 99% 不知道这个地方 也不知道怎么念这个名字
galikeoy
2022-05-12 18:09:19 +08:00
@yuan321 #23 你可以在 js 所有循环方法更改元素属性,find,filter,some,map,every, 他们的区别只是返回值和执行顺序而已,从性能上考虑,自然是 test.forEach(i => i.dn = '其他')最好,map 还要返回
LLaMA2
2022-06-07 11:20:12 +08:00
歪一下,map 的话入参变成 async 然后 Promise.all 可以并发的跑,量大的话还是能快过 forEach

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

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

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

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

© 2021 V2EX