javascript - Javascript重新格式化或将对象数组映射到新对象的新数组?就像重新格式化它并为值提供新的键(名称)
问题描述
我是数组和对象的新手,所以我整天都在做这个任务我有一个 JSON 文件或数组语言(JavaScript),我也在 StackOverflow 上搜索,但不能很好地理解它们:
[
{ "date": "1959:01", "1": 138.89, "2": 139.39, "3": 139.74, "4": 139.69, "5": 140.68, "6": 141.17 },
{ "date": "1959:07", "1": 141.7, "2": 141.9, "3": 141.01, "4": 140.47, "5": 140.38, "6": 139.95 },
{ "date": "1960:01", "1": 139.98, "2": 139.87, "3": 139.75, "4": 139.56, "5": 139.61, "6": 139.58 },
{ "date": "1960:07", "1": 140.18, "2": 141.31, "3": 141.18, "4": 140.92, "5": 140.86, "6": 140.69 },
{ "date": "1961:01", "1": 141.06, "2": 141.6, "3": 141.87, "4": 142.13, "5": 142.66, "6": 142.88 },
{ "date": "1961:07", "1": 142.92, "2": 143.49, "3": 143.78, "4": 144.14, "5": 144.76, "6": 145.2 },
{ "date": "1962:01", "1": 145.24, "2": 145.66, "3": 145.96, "4": 146.4, "5": 146.84, "6": 146.58 },
{ "date": "1962:07", "1": 146.46, "2": 146.57, "3": 146.3, "4": 146.71, "5": 147.29, "6": 147.82 },
{ "date": "1963:01", "1": 148.26, "2": 148.9, "3": 149.17, "4": 149.7, "5": 150.39, "6": 150.43 },
{ "date": "1963:07", "1": 151.34, "2": 151.78, "3": 151.98, "4": 152.55, "5": 153.65, "6": 153.29 },
{ "date": "1964:01", "1": 153.74, "2": 154.31, "3": 154.48, "4": 154.77, "5": 155.33, "6": 155.62 },
{ "date": "1964:07", "1": 156.8, "2": 157.82, "3": 158.75, "4": 159.24, "5": 159.96, "6": 160.3 },
{ "date": "1965:01", "1": 160.71, "2": 160.94, "3": 161.47, "4": 162.03, "5": 161.7, "6": 162.19 },
{ "date": "1965:07", "1": 163.05, "2": 163.68, "3": 164.85, "4": 165.97, "5": 166.71, "6": 167.85 },
{ "date": "1966:01", "1": 169.08, "2": 169.62, "3": 170.51, "4": 171.81, "5": 171.33, "6": 171.57 },
{ "date": "1966:07", "1": 170.31, "2": 170.81, "3": 171.97, "4": 171.16, "5": 171.38, "6": 172.03 }
]
这些就像公司在指定年限内的收入,例如在 1959:01 开始时,从 1 到 6 是一年的前 6 个月,同年 1956:07 但“:07”中的差异是值同年最后 6 个月(1 到 6 个月),所以我想用最容易理解的代码进行如下输出。
"1956": {
"1": "value",
"2": "value",
"3": "value",
"4": "value",
"5": "value",
"6": "value",
"7": "value",
"8": "value",
"9": "value",
"10": "value",
"11": "value",
"12": "value"
},
"1957": {
"1": "value",
"2": "value",
"3": "value",
"4": "value",
"5": "value",
"6": "value",
"7": "value",
"8": "value",
"9": "value",
"10": "value",
"11": "value",
"12": "value"
},
"1958": {
"1": "value",
"2": "value",
"3": "value",
"4": "value",
"5": "value",
"6": "value",
"7": "value",
"8": "value",
"9": "value",
"10": "value",
"11": "value",
"12": "value"
}
非常感谢帮助。
解决方案
这是你的答案:
const data=[
{ "date": "1959:01", "1": 138.89, "2": 139.39, "3": 139.74, "4": 139.69, "5": 140.68, "6": 141.17 },
{ "date": "1959:07", "1": 141.7, "2": 141.9, "3": 141.01, "4": 140.47, "5": 140.38, "6": 139.95 },
{ "date": "1960:01", "1": 139.98, "2": 139.87, "3": 139.75, "4": 139.56, "5": 139.61, "6": 139.58 },
{ "date": "1960:07", "1": 140.18, "2": 141.31, "3": 141.18, "4": 140.92, "5": 140.86, "6": 140.69 },
{ "date": "1961:01", "1": 141.06, "2": 141.6, "3": 141.87, "4": 142.13, "5": 142.66, "6": 142.88 },
{ "date": "1961:07", "1": 142.92, "2": 143.49, "3": 143.78, "4": 144.14, "5": 144.76, "6": 145.2 },
{ "date": "1962:01", "1": 145.24, "2": 145.66, "3": 145.96, "4": 146.4, "5": 146.84, "6": 146.58 },
{ "date": "1962:07", "1": 146.46, "2": 146.57, "3": 146.3, "4": 146.71, "5": 147.29, "6": 147.82 },
{ "date": "1963:01", "1": 148.26, "2": 148.9, "3": 149.17, "4": 149.7, "5": 150.39, "6": 150.43 },
{ "date": "1963:07", "1": 151.34, "2": 151.78, "3": 151.98, "4": 152.55, "5": 153.65, "6": 153.29 },
{ "date": "1964:01", "1": 153.74, "2": 154.31, "3": 154.48, "4": 154.77, "5": 155.33, "6": 155.62 },
{ "date": "1964:07", "1": 156.8, "2": 157.82, "3": 158.75, "4": 159.24, "5": 159.96, "6": 160.3 },
{ "date": "1965:01", "1": 160.71, "2": 160.94, "3": 161.47, "4": 162.03, "5": 161.7, "6": 162.19 },
{ "date": "1965:07", "1": 163.05, "2": 163.68, "3": 164.85, "4": 165.97, "5": 166.71, "6": 167.85 },
{ "date": "1966:01", "1": 169.08, "2": 169.62, "3": 170.51, "4": 171.81, "5": 171.33, "6": 171.57 },
{ "date": "1966:07", "1": 170.31, "2": 170.81, "3": 171.97, "4": 171.16, "5": 171.38, "6": 172.03 }
]
const formated={};
for(let obj of data){
const formatDate=obj['date'].split(":")[0];
formated[formatDate]={...obj};
delete formated[formatDate]['date']
}
console.log(formated)
这里的变量formated
是一个看起来像这样的对象:
'1959': {
'1': 141.7,
'2': 141.9,
'3': 141.01,
'4': 140.47,
'5': 140.38,
'6': 139.95
},
'1960': {
'1': 140.18,
'2': 141.31,
'3': 141.18,
'4': 140.92,
'5': 140.86,
'6': 140.69
},
'1961': {
'1': 142.92,
'2': 143.49,
'3': 143.78,
'4': 144.14,
'5': 144.76,
'6': 145.2
},
'1962': {
'1': 146.46,
'2': 146.57,
'3': 146.3,
'4': 146.71,
'5': 147.29,
'6': 147.82
},
'1963': {
'1': 151.34,
'2': 151.78,
'3': 151.98,
'4': 152.55,
'5': 153.65,
'6': 153.29
},
'1964': {
'1': 156.8,
'2': 157.82,
'3': 158.75,
'4': 159.24,
'5': 159.96,
'6': 160.3
},
'1965': {
'1': 163.05,
'2': 163.68,
'3': 164.85,
'4': 165.97,
'5': 166.71,
'6': 167.85
},
'1966': {
'1': 170.31,
'2': 170.81,
'3': 171.97,
'4': 171.16,
'5': 171.38,
'6': 172.03
}
}
推荐阅读
- excel - UDF 在 VBA 中工作,返回 #REF!在工作簿中
- dart - 重建父级时调用子级初始化方法 - 颤动
- java - 更改数组列表中的元素
- javascript - 如何在特定显示器的双显示器设置中打开浏览器窗口?
- linux - 计算数组 bash 中的出现次数
- anylogic - AnyLogic:是否有任何隐式方法可以动态设置 pedEscalator 的“自动扶梯”字段?
- ruby-on-rails-5 - Rails 凭证在 Initializers 中不起作用的任何原因?
- java - 引起:java.lang.IllegalArgumentException: CONTAINING (1): [IsContaining, Containing, Contains]不支持redis查询派生-Redis
- javascript - 如何在按钮 onlick 上添加加载微调器
- javascript - 前端:Internet Explorer 问题