javascript - 如何解析对象数组,每个对象都有一个日期数组,返回一个唯一的日期数组和两个数据数组
问题描述
我正在努力想出一种格式化这些数据的方法。
期望返回:具有 3 个数组的对象
- 一组独特的日期
dates
一个 data1 值的数组,其长度与数组的长度相同,null
并且索引与dates
数组中data1
没有值的索引相对应- 与 2 相同,但 data1 值除外
下面显示的示例应该更好地了解我要解决的问题。
期望的结果:
{ dates: ['Tue Jun 20 2018',
'Wed Jun 21 2018',
'Thu Jun 22 2018',
'Fri Jun 23 2018',
'Sat Jun 24 2018'],
data1: [5, null, 12, null, 20]
data2: [14, 4, 15, 2, null]
}
示例输入:具有多个对象的数组。每个对象都有一个dates
属性
[
{ dates: ['Tue Jun 20 2018',
'Thu Jun 22 2018',
'Sat Jun 24 2018'],
data1: [5, 12, 20]
},
{ dates: ['Tue Jun 20 2018',
'Wed Jun 21 2018',
'Thu Jun 22 2018',
'Fri Jun 23 2018'],
data2: [14, 4, 15, 2]
}
]
我可以通过为每个输入对象创建两个对象键值对、将所有日期连接到一个数组中并使其唯一、映射新的日期数组并null
在每个数据数组中插入值(如果该特定对象没有该日期作为键)来解决.
抱歉,解释冗长/令人困惑。看看输入/输出,让我知道如何最好地解决这个问题。
谢谢!
解决方案
null
通过添加到所有其他行来转移新日期:
function merge(data, key, { dates = [], values = {} } = {}) {
// Add the key to the resulting values
if(!values[key]) values[key] = [];
// Go over all dates of the data
for(const [index, date] of data.dates.entries()) {
// Add new dates by adding `null` to all keys
if(!dates.includes(date)) {
dates.push(date);
Object.values(values).forEach(arr => arr.push(null));
}
// then copy the value from data to values
const pos = dates.indexOf(date);
values[key][pos] = data[key][index];
}
// also add a method for chaining
return { dates, values, result: { dates, ...values }, merge(data, key){ return merge(data, key, this); }, };
}
可用作:
const { result } =
merge(arr[0], "data1")
.merge(arr[1], "data2");
推荐阅读
- java - 使用 Webview 打开 MainActivity2,并保留 MainActivity 中的 Uri.parse(url)
- python - 使用正则表达式通过带前缀的逗号分隔字符串
- reactjs - Chakra-ui 在 Firefox 上忽略 FontWeight
- mongodb - 羽毛猫鼬:Mongo-DB 事务 - ReferenceError:何时未定义
- azure - Powershell 格式表表达式不允许划分 PsCustomObject 成员
- python - 是否可以在 matplotlib(python)中的数据之上绘制轮廓?
- javascript - DynamoDB PutCommand V3 - 返回项目
- android-studio - 如何在“5”秒后删除/隐藏 RecyclerView 中的项目?
- php - 如果是用户第一次购买,如何进行固定折扣
- python - 如何调整文本大小以完全适合 WxPython 中的网格单元格?我在获取属性时遇到问题