json array 如何过滤指定的属性?

2021-01-14 09:18:57 +08:00
 ymmagic1234

比如 我有一个

let data=[
    { "id"    : "1234",
      "key1"  : "val1",
      "key2"  : "val2",
      "name"  : "someone",
      "age"   : 39
    },
    { "id"    : "1234",
      "key1"  : "val1",
      "key2"  : "val2",
      "name"  : "someone",
      "age"   : 39
    }
  ]

我想过滤掉 key1,key2 得到

   [
    { "id"    : "1234",
      "name"  : "someone",
      "age"   : 39
    },
    { "id"    : "1234",
      "name"  : "someone",
      "age"   : 39
    }
  ]

请问用 js 有什么优雅的处理办法吗?

1400 次点击
所在节点    问与答
8 条回复
jamesxu
2021-01-14 09:27:27 +08:00
lodash 有个 omit 方法可以参考
dengshen
2021-01-14 09:30:38 +08:00
map 返回前 delete 不需要的 key 或者只返回需要的 key
ymmagic1234
2021-01-14 09:43:24 +08:00
@dengshen 可以写个例子不?
xxpandxxp
2021-01-14 09:54:12 +08:00
data.map(x=>{delete x['key1'];delete x['key2']})<br>
应该可以
duowb
2021-01-14 09:54:31 +08:00
data.map(item=>{
return {
id: item.id,
name: item.name,
age: item.age

}
})
这样吧
dengshen
2021-01-14 09:57:55 +08:00
@ymmagic1234 楼下两个都行
easonHHH
2021-01-14 09:59:42 +08:00
data.map(({ key1, key2, ...other }) => other)
baxtergu
2021-01-14 10:41:04 +08:00
let data = [
{
"id": "1234",
"key1": "val1",
"key2": "val2",
"name": "someone",
"age": 39
},
{
"id": "1234",
"key1": "val1",
"key2": "val2",
"name": "someone",
"age": 39
}
]

let result = data.map(item => {
// 过滤出想要保留的 key
const fKeys = Object.keys(item).filter(key => !['name', 'age'].includes(key));
// 不改变原有引用对象数据
let newItem = {};
for (let key of fKeys) {
newItem[key] = item[key];
}
return newItem;
});

指定黑名单就行了,如果是白名单的话用展开操作符可以简化逻辑

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

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

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

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

© 2021 V2EX