JS数组对象结构转换
我有一个一个数组对象,结构大概是这样的:resultData: [
{
createTime: 1595550263618,
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
request: 'luxi',
requestType: '信息查询'
}
]
里面有个时间戳,我希望通过时间戳将数组对象结构变成这样:
resultData: [{
year: 2020,
monthDay: '7月24日',
content: [{
createTime: 1595550263618,
time:'10:32',
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
time:'12:13',
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
time:'11:28',
request: 'luxi',
requestType: '信息查询'
}]
}]
通过getFullYear()、getMonth()等获得年月日和时分这些都没问题,就是结构怎么转换,没有思路,求指教。
注意,数组对象的length和内容都不是固定的,应该要用for循环转换。求指教。 function getLocalTime(nS) {
return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');
}
网上很多的 给你撸了个伪代码,相信你能看得懂。。
let resultArray = [];
originArray.forEach(item =>{
let year = 获取年份的函数(item);
let monthDay = 获取月份的函数(item);
let containItem = false;
resultArray.forEach(result =>{
if(result.year === year) {
result.content.push({
createTime: item.createTime,
time: 获取时间的函数(item),
request: item.request,
requestType: item.requestType
});
containItem = true;
}
});
if(!containItem) {
let result = {};
result.year = year;
result.monthDay = monthDay;
result.content = [];
result.content.push({
createTime: item.createTime,
time: 获取时间的函数(item),
request: item.request,
requestType: item.requestType
});
}
}); var resultData= [
{
createTime: 1595550263618,
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
request: 'luxi',
requestType: '信息查询'
}
]
var years=dateFormat(resultData.createTime,'Y');
var monthDays=dateFormat(resultData.createTime,'m月d日');
for (var i = 0; i < resultData.length; i++) {
resultData.time = dateFormat(resultData.createTime,'H:i');
}
var resultData2 = [{
year:years,
monthDay:monthDays,
content:resultData
}]
console.log(resultData2);
function dateFormat(timestamp, formats) {
// formats格式包括
// 1. Y-m-d
// 2. Y-m-d H:i:s
// 3. Y年m月d日
// 4. Y年m月d日 H时i分
formats = formats || 'Y-m-d';
var zero = function (value) {
if (value < 10) {
return '0' + value;
}
return value;
};
var myDate = timestamp? new Date(timestamp): new Date();
var year = myDate.getFullYear();
var month = zero(myDate.getMonth() + 1);
var day = zero(myDate.getDate());
var hour = zero(myDate.getHours());
var minite = zero(myDate.getMinutes());
var second = zero(myDate.getSeconds());
return formats.replace(/Y|m|d|H|i|s/ig, function (matches) {
return ({
Y: year,
m: month,
d: day,
H: hour,
i: minite,
s: second
});
});
}; kof21411 发表于 2020-7-25 10:22
var resultData= [
{
createTime: 1595550263618,
你好,这个我完全看懂,但关键问题未解决。
就是这代码没有考虑到跨年和跨月日的问题。
我就是这一点没有思路,谢谢大哥 cqwcns 发表于 2020-7-25 10:57
你好,这个我完全看懂,但关键问题未解决。
就是这代码没有考虑到跨年和跨月日的问题。
我只是提供了转换的方法
至于年和月日,这两个时间你要从那里读取呢?
从对象中的createTime?还是当前的时间呢?
kof21411 发表于 2020-7-25 11:03
我只是提供了转换的方法
至于年和月日,这两个时间你要从那里读取呢?
从对象中的createTime?还是当前 ...
createTime resultData: [{
year: 2020,
monthDay: '7月24日',
content: [{
createTime: 1595550263618,
time:'10:32',
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
time:'12:13',
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
time:'11:28',
request: 'luxi',
requestType: '信息查询'
}]
}]
题目说明清楚一点
year: 2020,
monthDay: '7月24日',
你的时间是从 new Date() 取现行时间的Year 和monthDay 吗?
content 数组中每个对象中的 time 的值 又从哪取?是根据每个对象中createTime 时间戳中取还是其他的?:
{
createTime: 1595550263618,
time:'10:32',
request: 'joo',
requestType: '信息查询'
} 淡水千痕 发表于 2020-7-25 11:38
resultData: [{
year: 2020,
monthDay: '7月24日',
大哥你好,所有日期和时间数据均来自createTime时间戳 本帖最后由 cqwcns 于 2020-7-25 12:04 编辑
我现在的代码是这样的,但存在的问题就是相同的年月日没有合并为一个对象。
let resultData = res.result.data
let formatData=[]
for (var i = 0; i < resultData.length; i++) {
resultData.time = common.funDateFormat(resultData.createTime,'H:i');
let years=common.funDateFormat(resultData.createTime,'Y');
let monthDays=common.funDateFormat(resultData.createTime,'m月d日');
formatData={years:years,monthDays:monthDays,content:resultData}
}
console.log(formatData);
我希望相同的年月日可以合并为一个对象,同一年月日的内容合并到content中,类似这样:
resultData: [{
year: 2020,
monthDay: '7月24日',
content: [{
createTime: 1595550263618,
time:'10:32',
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
time:'12:13',
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
time:'11:28',
request: 'luxi',
requestType: '信息查询'
}]
},{
year: 2020,
monthDay: '7月25日',
content: [{
createTime: 1595550263618,
time:'10:32',
request: 'joo',
requestType: '信息查询'
}, {
createTime: 1595380268698,
time:'12:13',
request: 'tom',
requestType: '工单处理'
}, {
createTime: 1595680264638,
time:'11:28',
request: 'luxi',
requestType: '信息查询'
}]
}
]
提醒,所有年月日时分等数据均来自createTime的时间戳。请各位大哥指教,谢谢。
页:
[1]
2