我有一个包含键和对象的对象。我正在尝试查看是否可以过滤掉并只返回符合条件的对象。这就是对象
随机数密钥将或可以不同。
{
"0e93e707-e5aa-4d2b-91ab-a8dec97af344": {
"Id": "0e93e707-e5aa-4d2b-91ab-a8dec97af344",
"ExternalSecurityListId": null,
"CreatorId": "557fa8b2-59db-430d-9595-cd17884c9151",
"Name": "Chris",
"PartnerName": null,
"Type": "Watch",
"CostBasis": 0,
"Processing": false,
"NotificationSettings": {
"SourceId": "0e93e707-e5aa-4d2b-91ab-a8dec97af344",
"SourceType": "SecurityList",
"ChannelTypes": null,
"NotificationFilters": []
},
"Owner": null,
"SharingStatus": "None",
"CreatedDate": "2023-02-01T20:31:21.848Z",
"ModifiedDate": "2023-02-10T17:12:21.053Z",
"IsGroup": false,
"UnderlyingSecurityListIds": [],
"MaturingSoon": false
},
"ed89d5a3-464b-4bd7-b9bb-e42ee87f6520": {
"Id": "ed89d5a3-464b-4bd7-b9bb-e42ee87f6520",
"ExternalSecurityListId": null,
"CreatorId": "557fa8b2-59db-430d-9595-cd17884c9151",
"Name": "Chris Portfolio Two",
"PartnerName": null,
"Type": "Portfolio",
"CostBasis": 100000,
"Processing": false,
"NotificationSettings": {
"SourceId": "ed89d5a3-464b-4bd7-b9bb-e42ee87f6520",
"SourceType": "SecurityList",
"ChannelTypes": null,
"NotificationFilters": []
},
"Owner": null,
"SharingStatus": "None",
"CreatedDate": "2023-03-20T19:20:02.16Z",
"ModifiedDate": "2023-03-20T19:20:17.117Z",
"IsGroup": false,
"UnderlyingSecurityListIds": [],
"MaturingSoon": false
},
}
我试过像这样按键过滤,但它没有返回任何结果。
const allowed = ['Portfolio'];
const filtered = Object.keys(portfoliosData)
.filter(key => allowed.includes(key))
.reduce((obj, key) => {
obj[key] = portfoliosData[key];
return obj;
}, {});
const filtered = Object.keys(portfoliosData)
.filter(key => allowed.includes(key))
.reduce((obj, key) => {
obj[key] = portfoliosData[key];
return obj;
}, {});
有什么想法或建议吗?
6条答案
按热度按时间uz75evzq1#
好的,根据您的评论,这是实现这一目标的一个选项:
它将只列出最上面的对象的值(而不是键),然后使用捕获属性Type的lambda迭代filter,并检查它是否等于预期值
bjp0bcyl2#
假设你的JSON blob被赋值给
portfoliosData
变量,那么Object.keys(portfoliosData)
将返回["0e93e707-e5aa-4d2b-91ab-a8dec97af344", "ed89d5a3-464b-4bd7-b9bb-e42ee87f6520"]
。显然allowed
数组不包含这两个键,所以你的过滤器(正确地)过滤掉了所有选项,并返回一个空数组。pkwftd7m3#
这将把对象字典过滤成一个
[key, object]
数组:输出:
[ ["1", {"Property":"correct"}] ]
。ryevplcw4#
你可以遍历
Object.keys(portfoliosData)
,然后对每个变量检查它们的投资组合类型,你的allowed
变量似乎不符合你想要的应用工作方式。rbpvctlc5#
看起来你的
portfoliosData
是一个Map,其中键是id,值是具有不同Type
s的相应数据项。你想获得allowed
列表中所有具有Type
的项的列表。你可以这样做:
const allowedItems = Object.entries(portfolioData).filter(item => allowed.includes(item.Type))
这种方法完全忽略了
portfolioData
的键,因为它们是随机的。Object.values
返回您可以过滤的所有项的数组。toe950276#
我只是把这个放在一起,看看这是否有效。
我把你的示例数据放到了一个data const中。所以只要把数据改成你的源数据,这个就可以过滤它了。