吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1043|回复: 14
收起左侧

[求助] JS数组对象结构转换

[复制链接]
cqwcns 发表于 2020-7-25 09:23
我有一个一个数组对象,结构大概是这样的:
[JavaScript] 纯文本查看 复制代码
 resultData: [
     {
        createTime: 1595550263618,
request: 'joo',
        requestType: '信息查询'
      }, {
        createTime: 1595380268698,
request: 'tom',
        requestType: '工单处理'
      }, {
        createTime: 1595680264638,
request: 'luxi',
        requestType: '信息查询'
      }
    ]


里面有个时间戳,我希望通过时间戳将数组对象结构变成这样:
[JavaScript] 纯文本查看 复制代码
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循环转换。求指教。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥门饿鬼 发表于 2020-7-25 10:02
function getLocalTime(nS) {     
   return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');     
}
网上很多的
lsy_loren 发表于 2020-7-25 10:06
给你撸了个伪代码,相信你能看得懂。。

[JavaScript] 纯文本查看 复制代码
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
		});
	}
});
kof21411 发表于 2020-7-25 10:22
[JavaScript] 纯文本查看 复制代码
var resultData= [
     {
        createTime: 1595550263618,
request: 'joo',
        requestType: '信息查询'
      }, {
        createTime: 1595380268698,
request: 'tom',
        requestType: '工单处理'
      }, {
        createTime: 1595680264638,
request: 'luxi',
        requestType: '信息查询'
      }
    ]

var years=dateFormat(resultData[0].createTime,'Y');
var monthDays=dateFormat(resultData[0].createTime,'m月d日');

for (var i = 0; i < resultData.length; i++) {                   
      resultData[i].time = dateFormat(resultData[i].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
        })[matches];
    });
};
 楼主| cqwcns 发表于 2020-7-25 10:57
kof21411 发表于 2020-7-25 10:22
[mw_shl_code=javascript,true]var resultData= [
     {
        createTime: 1595550263618,

你好,这个我完全看懂,但关键问题未解决。

就是这代码没有考虑到跨年和跨月日的问题。

我就是这一点没有思路,谢谢大哥
kof21411 发表于 2020-7-25 11:03
cqwcns 发表于 2020-7-25 10:57
你好,这个我完全看懂,但关键问题未解决。

就是这代码没有考虑到跨年和跨月日的问题。

我只是提供了转换的方法
至于年和月日,这两个时间你要从那里读取呢?
从对象中的createTime?还是当前的时间呢?
 楼主| cqwcns 发表于 2020-7-25 11:35
kof21411 发表于 2020-7-25 11:03
我只是提供了转换的方法
至于年和月日,这两个时间你要从那里读取呢?
从对象中的createTime?还是当前 ...

createTime
淡水千痕 发表于 2020-7-25 11:38
[JavaScript] 纯文本查看 复制代码
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 时间戳中取还是其他的?:
[JavaScript] 纯文本查看 复制代码
{
        createTime: 1595550263618,
        time:'10:32',
        request: 'joo',
        requestType: '信息查询'
      }
 楼主| cqwcns 发表于 2020-7-25 11:48
淡水千痕 发表于 2020-7-25 11:38
[mw_shl_code=javascript,true]resultData: [{
      year: 2020,  
      monthDay: '7月24日',

大哥你好,所有日期和时间数据均来自createTime时间戳
 楼主| cqwcns 发表于 2020-7-25 12:02
本帖最后由 cqwcns 于 2020-7-25 12:04 编辑

我现在的代码是这样的,但存在的问题就是相同的年月日没有合并为一个对象。

[JavaScript] 纯文本查看 复制代码
          let resultData = res.result.data
              let formatData=[]
             for (var i = 0; i < resultData.length; i++) {  
              resultData[i].time = common.funDateFormat(resultData[i].createTime,'H:i');     
              let years=common.funDateFormat(resultData[i].createTime,'Y');
              let monthDays=common.funDateFormat(resultData[i].createTime,'m月d日');
              formatData[formatData.length]={years:years,monthDays:monthDays,content:resultData[i]}
             }
        
             console.log(formatData);


无标题.png

我希望相同的年月日可以合并为一个对象,同一年月日的内容合并到content中,类似这样:

[JavaScript] 纯文本查看 复制代码
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的时间戳。请各位大哥指教,谢谢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 15:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表