如何解决如何从较大的对象中定义较小的对象?
我正在使用的数据结构:
this.theDataStructureIHave = [
{
"1304": {
"id": 6458,"data": "Data1","created_at": "2020-10-20 23:16:38","updated_at": "2020-10-20 23:16:38"
},"1305": {
"id": 6459,"data": "Data2","1306": {
"id": 6460,"data": "Data3","1307": {
"id": 6461,"data": "1227","1308": {
"id": 6462,"data": "12256","header": null,"id": 500
},{
"1304": {
"id": 6463,"data": "Data4","1305": {
"id": 6464,"data": "Data5","1306": {
"id": 6465,"data": "Data6","1307": {
"id": 6466,"data": "3574","1308": {
"id": 6467,"data": "25824","id": 501
},{
"1304": {
"id": 6468,"data": "Data7","1305": {
"id": 6469,"data": "Data8","created_at": "2020-10-20 23:16:39","updated_at": "2020-10-20 23:16:39"
},"1306": {
"id": 6470,"data": "Data9","1307": {
"id": 6471,"data": "3061","1308": {
"id": 6472,"data": "26696","id": 502
}
]
我要实现的数据结构:
this.theResultIWant = [
{
"1304": {
"id": 6458,"updated_at": "2020-10-20 23:16:38"
}
},}
]
总而言之,我有一个包含两个对象的数组,并且在这些对象内有更多对象(this.theDataStructureIHave)。
从该数据结构开始,我想创建一个对象的新数组,该数组本质上包含this.theDataStructureIHave中的某些元素。
在这里我还有一个数字数组:[1304,1306]。说这已分配给变量arrayOfNumbers = [1304,1306]
我想要的最终结果是通过this.theDataStructureIHave过滤并检索索引等于1304和1306的对象。arrayOfNumbers是一个动态值(这只是一个示例),在代码中看起来像这样:
this.arrayOfNumbers = this.someObject.columns.map(Number);
是否有办法实现这一目标并从this.theDataStructureIHave获得theResultIWant?没有硬编码值?
对于我想要实现的数据结构,请参见codepen的底部,名为this.theResultIWant
解决方法
请注意,根据输入的不同,此解决方案并不安全。如果输入数据不正确,也不会引发异常。
工作原理:
- 我们正在映射数据结构IHave,即将该数组中的每个externalObject更改为其他对象
-
Object.entries(outerObject)
为我们提供了该对象的键和值对(类似[[key1,value1],[key2,value2],[key3,value3]]
) - 我们根据密钥是否包含在
filter
中来arrayOfNumbers
。请注意,数组具有整数,并且对象具有键作为字符串,因此需要parseInt
。如果您对([key,_])
感到困惑-这是一个数组解构,即它使用[key,val]
数组并分别给我们key
和value
(我没有使用,所以我将其命名为_
),否则我们将使用类似(keyValuePair)
的名称,然后将键引用为keyValuePair[0]
-
Object.fromEntries(...)
基于键/值对构造一个对象
const theDataStructureIHave = [{
"1304": {
"id": 6458,"data": "Data1","created_at": "2020-10-20 23:16:38","updated_at": "2020-10-20 23:16:38"
},"1305": {
"id": 6459,"data": "Data2","1306": {
"id": 6460,"data": "Data3","1307": {
"id": 6461,"data": "1227","1308": {
"id": 6462,"data": "12256","header": null,"id": 500
},{
"1304": {
"id": 6463,"data": "Data4","1305": {
"id": 6464,"data": "Data5","1306": {
"id": 6465,"data": "Data6","1307": {
"id": 6466,"data": "3574","1308": {
"id": 6467,"data": "25824","id": 501
},{
"1304": {
"id": 6468,"data": "Data7","1305": {
"id": 6469,"data": "Data8","created_at": "2020-10-20 23:16:39","updated_at": "2020-10-20 23:16:39"
},"1306": {
"id": 6470,"data": "Data9","1307": {
"id": 6471,"data": "3061","1308": {
"id": 6472,"data": "26696","id": 502
}
]
const arrayOfNumbers = [1304,1306];
const result = theDataStructureIHave.map(outerObject =>
Object.fromEntries(Object.entries(outerObject).filter(([key,_]) => arrayOfNumbers.includes(parseInt(key))))
);
console.log(result)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。