Найти минимальную и максимальную дату в массиве, используя формат гггг-мм-дд - PullRequest
0 голосов
/ 01 апреля 2019

Как получить наименьшую и максимальную дату в массиве в формате ГГГГ-мм-дд? Вот образец моих значений даты.

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}]
   
console.log(data);

Ответы [ 5 ]

2 голосов
/ 01 апреля 2019

Если вам просто нужны даты, вы можете использовать Math.min и Math.max, если вы сопоставляете свой массив с датами, используя .map:

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}];


const dates = data.map(({date}) => new Date(date));
const minDate = new Date(Math.min(...dates));
const maxDate = new Date(Math.max(...dates));

console.log("min", minDate.toISOString().slice(0,10));
console.log("max", maxDate.toISOString().slice(0,10));

Кроме того, вы можете отсортировать массив и использовать первый и последний элементы:

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}];


const dates = data.map(({date}) => new Date(date));
const sortedDates = dates.sort((a, b) => a - b);

const minDate = sortedDates[0];
const maxDate = sortedDates[sortedDates.length-1];

console.log("min", minDate.toISOString().slice(0,10));
console.log("max", maxDate.toISOString().slice(0,10));
2 голосов
/ 01 апреля 2019

Вы можете использовать уменьшить и Date.parse

const data = [{"date": "2012-10-21","value": 60}, {  "date": "2012-10-22","value": 61}, {"date": "2012-10-23","value": 69}, {"date": "2012-10-24","value": 67}]
   
let maxDate = data.reduce((op,inp)=>{
  if(Date.parse(inp.date) > Date.parse(op.max)){
    op.max = inp.date
  }
  if(Date.parse(inp.date) < Date.parse(op.max)){
    op.least = inp.date
  }
  return op
},{least:data[0].date,max:data[0].date})


console.log(maxDate)
1 голос
/ 01 апреля 2019

Если используется этот формат даты, будет работать простой .sort() для свойства даты.Самая ранняя дата - это первый элемент массива, а последняя дата - последний элемент.

Это большое преимущество использования формата даты (например, стандарта ISO), в котором лексическая сортировка по строковому значению совпадает слогическая сортировка по дате.

const data = [{
  "date": "2012-10-21",
  "value": 60
}, {
  "date": "2012-10-22",
  "value": 61
}, {
  "date": "2012-10-23",
  "value": 69
}, {
  "date": "2012-10-24",
  "value": 67
}, {
  "date": "2012-10-22",
  "value": 102
}];

const sorted_by_date = data.sort(( a, b ) => a.date.localeCompare( b.date ));

const earliest_date = sorted_by_date[ 0 ];

const latest_date = sorted_by_date[ sorted_by_date.length - 1 ];

console.log( earliest_date );

console.log( latest_date );
1 голос
/ 01 апреля 2019

Вы можете уменьшить данные и просто сравнить строки.

const
    data = [{ date: "2012-10-21", value: 60 }, { date: "2012-10-22", value: 61 }, { date: "2012-10-23", value: 69 }, { date: "2012-10-24", value: 67 }],
    result = data.reduce((r, { date }) => {
        if (!r) return { min: date, max: date };
        if (r.min > date) r.min = date;
        if (r.max < date) r.max = date;
        return r;
    }, undefined);

console.log(result);
0 голосов
/ 01 апреля 2019
function checkDate(data,condition){
    if(condition == 'max'){
        var max = 0
        data.map((item)=>{
            if(new Date(item.date)>max){
                max = new Date(item.date)
            }
        })
        return max;
    }else if(condition == 'least'){
        var least = new Date()
        data.map((item)=>{
            if(new Date(item.date)<least){
                least = new Date(item.date)
            }
        })
        return least;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...