javascript - Missing dates to add in a json object of keys
问题描述
I have two arrays one with constant dates and other with multiple JSON objects of dates, but the JSON objects have some missing dates how to add the missing dates from constant dates array to the second array of JSON objects
constantdates = [
'Jul 7',
'Jul 8',
'Jul 9',
'Jul 10',
'Jul 27',
'Jul 16',
'Jul 30',
'Jul 26',
'Jul 12',
'Jul 22',
'Jul 17',
'Jul 24',
'Jul 19',
'Jul 14',
'Jul 25',
'Jul 13',
'Jul 23',
'Jul 15',
'Jul 29',
'Jul 11',
'Jul 28',
'Jul 21',
'Jul 20',
'Jul 18'
]
myarray = [{
name: 'Arun',
address: 'hydrabad',
worker: 'test',
'Jul 11': 1425,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 29': 1425,
'Jul 30': 1325,
},
{
name: 'Abi',
address: 'delhi',
worker: 'test',
'Jul 11': 1425,
'Jul 12': 1275,
'Jul 13': 1475,
'Jul 14': 1275,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 18': 1425,
'Jul 19': 1475,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 29': 1425,
'Jul 30': 1325
}]
Expected Output
[{
name: 'Arun',
address: 'hydrabad',
worker: 'test',
'Jul 7': null,
'Jul 8': null,
'Jul 9': null,
'Jul 10': null,
'Jul 11': 1425,
'Jul 12': null,
'Jul 13': null,
'Jul 14': null,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 18': null,
'Jul 19': null,
'Jul 20': null,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 28': null,
'Jul 29': 1425,
'Jul 30': 1325,
},
{
name: 'Abi',
address: 'delhi',
worker: 'test',
'Jul 7': null,
'Jul 8': null,
'Jul 9': null,
'Jul 10': null,
'Jul 11': 1425,
'Jul 12': 1275,
'Jul 13': 1475,
'Jul 14': 1275,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 18': 1425,
'Jul 19': 1475,
'Jul 20': null,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 28': null,
'Jul 29': 1425,
'Jul 30': 1325
}]
解决方案
Use reduce
. Inside reduce callback use forEach
on the dates array. Inside forEach
callback take each element from dates array and check if same element exist in the object of myArray. If it does not exist then add it as a new key and set value to null.
const dates = [
'Jul 7',
'Jul 8',
'Jul 9',
'Jul 10',
'Jul 27',
'Jul 16',
'Jul 30',
'Jul 26',
'Jul 12',
'Jul 22',
'Jul 17',
'Jul 24',
'Jul 19',
'Jul 14',
'Jul 25',
'Jul 13',
'Jul 23',
'Jul 15',
'Jul 29',
'Jul 11',
'Jul 28',
'Jul 21',
'Jul 20',
'Jul 18'
]
const myarray = [{
name: 'Arun',
address: 'hydrabad',
worker: 'test',
'Jul 11': 1425,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 29': 1425,
'Jul 30': 1325,
},
{
name: 'Abi',
address: 'delhi',
worker: 'test',
'Jul 11': 1425,
'Jul 12': 1275,
'Jul 13': 1475,
'Jul 14': 1275,
'Jul 15': 1425,
'Jul 16': 1475,
'Jul 17': 1425,
'Jul 18': 1425,
'Jul 19': 1475,
'Jul 21': 1475,
'Jul 22': 1425,
'Jul 23': 1475,
'Jul 24': 1225,
'Jul 25': 1425,
'Jul 26': 1075,
'Jul 27': 1475,
'Jul 29': 1425,
'Jul 30': 1325
}
]
const newData = myarray.reduce((acc, curr) => {
let obj = {}
obj['fullName'] = curr.name;
obj['address'] = curr.address;
obj['worker'] = curr.worker;
dates.forEach((item) => {
if (curr.hasOwnProperty(item)) {
obj[item] = curr[item]
} else {
obj[item] = null
}
})
acc.push(obj)
return acc;
}, []);
console.log(newData)
推荐阅读
- java - 如何创建由用户填充的对象数组并查看数组元素?
- javascript - D3 线没有绘制,但轴和图例被渲染,尽管日期格式,仍然得到 path is not a num error
- c# - 无法使用 OLEDB 打开 CSV 文件
- python - 寻找一种使用 Python Kivy 绘制部分图像的方法
- elasticsearch - 查询键值至少为某个数字的弹性搜索
- java - 关于 Spring security URL based security 的说明
- php - Laravel:按键映射并在json中获取结果
- list - 强制列表不等式?
- javascript - 如何在 React 组件中开玩笑测试 lodash.get 的使用?
- java - 有没有办法可以按版本的升序打印这些 ID?