Сортировать три массива по дате - PullRequest
0 голосов
/ 28 января 2019

Итак, у меня есть три массива, которые имеют одинаковые элементы и длину, но они сортируются по-разному по одному атрибуту на массив.

Я хочу показать каждый элемент из каждого массива на временной шкале.Так, что один элемент присутствует время дерева, которые разные даты.

как я могу это сделать?

this.timeLineData = []
let sortedStart = this.sortArray(this.data, '0')
let sortedExce = this.sortArray(this.data, '1')
let sortedEnd = this.sortArray(this.data, '2')

Как я сортирую:

if (sortType === '0'){
  return myArr.sort((val1, val2)=> {return <any>new Date(val1.date1) - <any>new Date(val2.date1)})
}
else if (sortType === '1'){
  return myArr.sort((val1, val2)=> {return <any>new Date(val1.date2) - <any>new Date(val2.date2)})
}
else if (sortType === '2'){
  return myArr.sort((val1, val2)=> {return <any>new Date(val1.date3) - <any>new Date(val2.date3)})
}

Я хочу иметьвыходной массив, в котором есть объекты, которые выглядят так:

class TimeLine {
element: any
date: Date
}

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Я также столкнулся с той же проблемой и нашел хорошее решение для сортировки данных нескольких столбцов в многомерном массиве.

Проверьте код ниже

(function() {
      function deepsort(){
    var i, order= arguments, L= order.length, tem;
    return a.sort(function(a, b){
        i= 0;
      
        while(i < L){
          
            tem= order[i++];
          var res = tem.split("_");
            var ao= a[res[0]] || 0, bo= b[res[0]] || 0;
            if(ao== bo) continue;
           
          if(res[1] == "ASC"){
            return ao > bo? 1: -1;
          }
          if(res[1] == "DESC"){
             return ao < bo? 1: -1;
          }
        }
        return 0;
    });
}

var a= [
    ["2011-10-9", "2011-10-10", "2011-10-11", 21],
    ["2011-10-6", "2011-10-7", "2011-10-8", 11],
    ["2011-10-3", "2011-10-4", "2011-10-5", 20]
];
document.write(deepsort(0+"_ASC",1+"_ASC"));
// for better result view check console log
console.log(deepsort(0+"_ASC",1+"_ASC"))
//console.log(a.deepsort(1))
    
    })();
0 голосов
/ 28 января 2019

Вот функциональный способ сделать это в Javascript / Typescript, используя функции высшего порядка для создания помощников для сортировки и преобразования данных на основе любого из date1, date2 или date3 свойств.

const timeLineData = [{
  date1: '2011-10-9',
  date2: '2011-10-10',
  date3: '2011-10-11',
  element: '123'
}, {
  date1: '2011-10-6',
  date2: '2011-10-7',
  date3: '2011-10-8',
  element: '456'
}, {
  date1: '2011-10-3',
  date2: '2011-10-4',
  date3: '2011-10-5',
  element: '789'
}];

const compare = dateProp => (e1, e2) => {
  return new Date(e1[dateProp]) - new Date(e2[dateProp]);
};

const transform = dateProp => data => {
  return { date: data[dateProp], element: data.element };
};

const sortedStart = timeLineData.sort(compare('date1')).map(transform('date1'));
const sortedExce = timeLineData.sort(compare('date2')).map(transform('date2'));
const sortedEnd = timeLineData.sort(compare('date3')).map(transform('date3'));

console.log('sortedStart:', sortedStart);
console.log('sortedExce:', sortedExce);
console.log('sortedEnd:', sortedEnd);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...