我需要数组元素列表中的最大日期: start_time属性
{
  "jobs" : [ {
    "job_id" : 10,
    "users" : [ {
      "user_id" : 11,
      "data_points" : [ {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "abc@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-21T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      } ]
    } ]
  } ]
}发布于 2017-07-22 22:11:54
您可以使用此函数计算日期数组的最大日期:
arr = ["2017-07-20T04:04:43.000Z", "2017-07-21T04:04:43.000Z","2017-07-20T04:04:43.000Z"];
new Date(Math.max.apply(null,
             arr
             .map(x => new Date(x))));特定的解决方案(仅适用于包含单元素数组的特定JSON ):
获取数据点列表
var data = {
  "jobs" : [ {
    "job_id" : 10,
    "users" : [ {
      "user_id" : 11,
      "data_points" : [ {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "abc@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-21T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      } ]
    } ]
  } ]
};
var d = data["jobs"][0]["users"][0]["data_points"];
var max_start_time = 
     new Date(Math.max.apply(null,
     d
       .map(z =>   
        z["start_time"]    
       ).map(w => new Date(w))));
       
console.log(max_start_time);
通用解决方案(您将获得一个由"job_id"和"user_id"索引的数组)。这等同于sql select job_id,user_id,max(start_time) from ...group by job_id,user_id
var data = {
  "jobs" : [ 
  {
    "job_id" : 110,
    "users" : [ {
      "user_id" : 11,
      "data_points" : [ {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "abc@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-21T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-07-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      } ]
    } ]
  },
  {
    "job_id" : 111,
    "users" : [ {
      "user_id" : 12,
      "data_points" : [ {
        "duration" : 0,
        "start_time" : "2017-08-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "abc@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-08-21T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-08-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      } ]
    },
    {
      "user_id" : 13,
      "data_points" : [ {
        "duration" : 0,
        "start_time" : "2017-08-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "abc@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-08-21T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      }, {
        "duration" : 0,
        "start_time" : "2017-08-20T04:04:43.000Z",
        "datastream" : "GENERIC",
        "username" : "rs022015@gmail.com.com"
      } ]
    }]
  }]
};
var max_start_time = {};
var r=data["jobs"].forEach(job =>
  {
     if (job.hasOwnProperty("job_id")) {
       if (job.hasOwnProperty("users")) {
         job["users"].forEach(userData =>
           { 
             if (userData.hasOwnProperty("data_points")) {
               max_start_time[[job["job_id"],userData["user_id"]]]=
               new Date(Math.max.apply(null,
                 userData["data_points"]
                 .map(z =>   
                 z["start_time"]    
                 ).map(w => new Date(w))));        
             }
           }
         )
       } 
     }
  }
);
console.log(max_start_time);
发布于 2017-07-22 16:54:58
这个应该可以了。它所做的是遍历每个列表(作业,用户,data_points),并将它们中的每一个减少到代表它的最大日期。
let data = {
    "jobs": [{
        "job_id": 10,
        "users": [{
            "user_id": 11,
            "data_points": [{
                "duration": 0,
                "start_time": "2017-07-20T04:04:43.000Z",
                "datastream": "GENERIC",
                "username": "abc@gmail.com.com"
            }, {
                "duration": 0,
                "start_time": "2017-07-21T04:04:43.000Z",
                "datastream": "GENERIC",
                "username": "rs022015@gmail.com.com"
            }, {
                "duration": 0,
                "start_time": "2017-07-20T04:04:43.000Z",
                "datastream": "GENERIC",
                "username": "rs022015@gmail.com.com"
            }]
        }]
    }]
}
let max = data.jobs.reduce((prev, job) => {
    let maxJobStartTime = job.users.reduce((prev, user) => {
        let maxUserStartTime = user.data_points.reduce((prev, point) => {
            return prev - new Date(point.start_time).getTime() > 0 ? prev : new Date(point.start_time).getTime();
        }, 0)
        console.log(maxUserStartTime);
        return prev - maxUserStartTime > 0 ? prev : maxUserStartTime;
    }, 0)
    return prev - maxJobStartTime > 0 ? prev : maxJobStartTime;
}, 0)
console.log(new Date(max));请参阅有效的游乐场示例 { let maxJobStartTime = job.users.reduce((prev, user) => { let maxUserStartTime = user.data_points.reduce((prev, point) => { return prev - new Date(point.start_time).getTime() > 0 ? prev : new Date(point.start_time).getTime(); }, 0) console.log(maxUserStartTime); return prev - maxUserStartTime > 0 ? prev : maxUserStartTime; }, 0) return prev - maxJobStartTime > 0 ? prev : maxJobStartTime; }, 0) console.log(new Date(max));)">here。
细目:
interface User {
    user_id: number,
    data_points: { start_time: string }[]
}
interface Job {
    job_id: number,
    users: User[]
}
interface Data {
    jobs: Job[]
}
// max time from a user's data_points
function maxUserStartTime(user: User) {
    return user.data_points.reduce((prev, point) => {
        return prev - new Date(point.start_time).getTime() > 0 ? prev : new Date(point.start_time).getTime();
    }, 0);
}
//using the max time of an user calculate the max time of all users in a job
function maxJobStartTime(job: Job) {
    return job.users.reduce((prev, user) => {
        let max = maxUserStartTime(user);
        return prev - max > 0 ? prev : max;
    }, 0);
}
// using the max time for a job calculate the max time out of all jobs
function maxTime(data: Data) {
    return data.jobs.reduce((prev, job) => {
        let max = maxJobStartTime(job)
        return prev - max > 0 ? prev : max;
    }, 0);
}
console.log(new Date(maxTime(data)));干净版本的工作示例可以在 { return prev - new Date(point.start_time).getTime() > 0 ? prev : new Date(point.start_time).getTime(); }, 0); } function maxJobStartTime(job: Job) { return job.users.reduce((prev, user) => { let max = maxUserStartTime(user); return prev - max > 0 ? prev : max; }, 0); } function maxTime(data: Data) { return data.jobs.reduce((prev, job) => { let max = maxJobStartTime(job) return prev - max > 0 ? prev : max; }, 0); } console.log(new Date(maxTime(data)));)">here中找到。
发布于 2017-07-22 17:00:02
尝尝这个
var userSortedData=jobs[0].users[0]. data_points.sort(function(a, b){return (b.start_time >a.start_time)?1:-1 ;});
console.log(userSortedData[0]);  // max Datehttps://stackoverflow.com/questions/45252465
复制相似问题