cqwcns 发表于 2020-7-25 09:23

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循环转换。求指教。

冥门饿鬼 发表于 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

给你撸了个伪代码,相信你能看得懂。。

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

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
      });
    });
};

cqwcns 发表于 2020-7-25 10:57

kof21411 发表于 2020-7-25 10:22
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

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: '信息查询'
      }

cqwcns 发表于 2020-7-25 11:48

淡水千痕 发表于 2020-7-25 11:38
resultData: [{
      year: 2020,
      monthDay: '7月24日',


大哥你好,所有日期和时间数据均来自createTime时间戳

cqwcns 发表于 2020-7-25 12:02

本帖最后由 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
查看完整版本: JS数组对象结构转换