gpt4 book ai didi

javascript - 如何过滤对象数组并保留对象键名称?

转载 作者:行者123 更新时间:2023-11-28 14:14:36 25 4
gpt4 key购买 nike

我有一些 JSON 数据,我试图过滤掉没有特定属性的 JSON 对象。

我可以使用 filter function from Underscore.JS成功过滤掉不具有正确属性的对象。

但是,当过滤函数运行时,它会删除对象的键名。

以下是在下面的过滤器函数中的变量 data 中使用的 JSON:

{
"Presentations": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 5
},
"Articles": {
"Instant": true,
"Daily": false,
"WeeklySummary": true,
"ContentTypeId": 1
},
"Blogs": {
"Instant": true,
"Daily": false,
"WeeklySummary": true,
"ContentTypeId": 61
},
"NewsBriefs": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 2
},
"SpecialInsights": {
"Instant": false,
"Daily": false,
"WeeklySummary": false,
"ContentTypeId": 50
},
"UserSelected": {
"Frequency": null,
"Value": false,
"ContentTypeId": 0
}
}

这里是 JavaScript 过滤函数,它返回一个对象数组,这些对象必须包含'Instant'属性

newArr = _.filter(data, function(obj){
return obj.hasOwnProperty('Instant')
});

如果我console.log newArr,这就是我得到的:

[
{
"Instant":false,
"Daily":false,
"WeeklySummary":false,
"ContentTypeId":5
},
{
"Instant":true,
"Daily":false,
"WeeklySummary":true,
"ContentTypeId":1
},
{
"Instant":true,
"Daily":false,
"WeeklySummary":true,
"ContentTypeId":61
},
{
"Instant":false,
"Daily":false,
"WeeklySummary":false,
"ContentTypeId":2
},
{
"Instant":false,
"Daily":false,
"WeeklySummary":false,
"ContentTypeId":50
}
]

正如您所看到的,它正确地过滤掉了没有 Instant 属性的对象,在本例中是 UserSelected 对象。

但是,在这个过程中,我丢失了对象键名称,例如 PresentationsArticles

过滤 JSON 数据时如何保留这些键名?

最佳答案

你可以在没有任何库的情况下做到这一点:

Object.entries(data).filter(([key, value]) => {
return value.hasOwnProperty('Instant')
}).reduce((acc, [key, value]) => {
return { ...acc, [key]: value }
}, {})

你做错的是,你在迭代字典时只保留了值,但从未继承过键。我猜你也可以使用新的 fromEntries,但它的工作方式是相同的

关于javascript - 如何过滤对象数组并保留对象键名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58066210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com