Фильтрация неопределенных или пустых строк из массива объектов в Javascript - PullRequest
1 голос
/ 05 марта 2020

Поэтому у меня возникли проблемы при создании функции, которая будет фильтровать и сортировать даты и данные, которые будут помещены в массив объектов. У меня проблема в другом, но похожем сценарии. Исходный вопрос был взят отсюда: Фильтрация неопределенного из массива объектов в Javascript

Допустим, что var arrObject имеет более 2 элементов в массиве. См. Код ниже. Я хочу отфильтровать любую пустую строку или неопределенные значения и любые элементы в массиве и отсортировать их как c. упорядочить по датам. В новом массиве я хочу вывести только date и bus_name. Обратите внимание, что имена в массиве разные, поэтому я хочу назвать их под другим именем, например, таким как:

{Date: '2012-02-11', busName: 'Thomas #2'}. ...

Как бы я совершил sh это?

Спасибо!

{date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM'},
{date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM'},
{date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM'},
{date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM'},
{date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM'},
{date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM',
]

function fancySort(array){
   let arrayCopy = array.slice(0);
  //your sort logic can be replaced here
  arrayCopy.sort();

  return arrayCopy
}

let newArray = arrObject.filter( obj => {
  //behave same as obj.date != undefined
  return obj.date
})

let sortedDates = fancySort(newArray.map(obj => Date.parse(obj.date)));

let sortedObjArray = sortedDates.map( date=>{
  let tempObj;
  newArray.some( na=> {
    tempObj = na;
    return Date.parse(na.date) == date
  })
  return tempObj;
})

console.log(sortedObjArray);```

1 Ответ

2 голосов
/ 05 марта 2020

Вы можете отфильтровать ненужные детали, сопоставить новые объекты с требуемыми свойствами и отсортировать массив по date.

var array = [{ date: " ", bus_name: 'Thomas #1', driver_name: 'Sam', time_start: '9AM', time_end: '5PM' }, { date: '2012-02-11', bus_name: 'Thomas #2', driver_name: 'Samantha', time_start: '8AM', time_end: '4PM' }, { date: '2011-02-02', bus_name: 'Thomas #3', driver_name: 'Peter', time_start: '12PM', time_end: '7PM' }, { date: '2010-06-04', bus_name: 'Thomas #4', driver_name: 'Eddie', time_start: '11AM', time_end: '6PM' }, { date: " ", bus_name: 'Thomas #5', driver_name: 'Raul', time_start: '4AM', time_end: '1PM' }, { date: '2014-04-03', bus_name: 'Thomas #6', driver_name: 'Jessie', time_start: '5AM', time_end: '2PM' }],
    result = array
        .filter(o => o.date !== ' ')
        .map(({ date, bus_name }) => ({ date, bus_name }))
        .sort((a, b) => a.date.localeCompare(b.date));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...