У меня есть два массива JavaScript, и мне нужно исключить на основе идентификаторов и отметки времени.

var str = [{"id":"5","name":"Test 1","ends":"2020-04-05 10:00"},{"id":"6","name":"Test 2","ends":"2020-03-29 12:33"},{"id":"8","name":"Test 3","ends":"2020-08-29 12:33"}];

var exclude = [5,8];

Поэтому я ожидаю отфильтровать по дате (удалить все, которые старше NOW) и удалить те, чьи идентификаторы в массиве exclude .

Я действительно не знаю, как это сделать. Пожалуйста, помогите, так как я только начинаю изучать JavaScript.

Спасибо.

-1
qqruza 7 Май 2020 в 16:16

2 ответа

Лучший ответ

Измените ответ @ Thalaivar, чтобы учесть время даты

var str = [
  {"id":"5","name":"Test 1","ends":"2020-05-07 10:00"},
  {"id":"6","name":"Test 2","ends":"2020-05-07 09:55"},
  {"id":"8","name":"Test 3","ends":"2020-08-29 12:33"}
];

var exclude = [5,8];

var filterDate = str.filter(e => {
   var todayInTime = new Date().getTime();
   var recordDateInTime = new Date(e.ends).getTime();
   return (recordDateInTime > todayInTime && exclude.indexOf(Number(e.id)) === -1)
})

console.log("filterDate", filterDate);

Скрипка здесь

1
Quethzel Díaz 7 Май 2020 в 14:02

Вы можете сделать что-то вроде ниже, чтобы получить результат:

var str = [{"id":"5","name":"Test 1","ends":"2020-05-07 10:00"},{"id":"6","name":"Test 2","ends":"2020-03-29 12:33"},{"id":"8","name":"Test 3","ends":"2020-08-29 12:33"}];
var exclude = [5,8];
var today = new Date().getTime(); 

var filterDate = str.filter(function(el){
   var otherDate = new Date(el.ends).getTime();
   return !Object.keys(el).some(k => 
       el['id'].toLowerCase().includes(exclude))
           && (otherDate > today)     
   })

   console.log("filterDate", filterDate);

Скрипка, которая поможет вам:

https://jsfiddle.net/8hLqpsd5/2/

1
Thalaivar 7 Май 2020 в 14:56