Как восстановить массив так, чтобы самое последнее время было на вершине, а прошедшее время смещено в последнюю часть - PullRequest
0 голосов
/ 04 апреля 2019

Допустим, я получил массив, который всегда был упорядочен в соответствии с его отметкой времени, как показано ниже:

// assuming the number means TIMESTAMP, and 0 means NOW.
[-2, -1, 0, 1, 2];

И я хочу перестроить его в значение ниже

[0, 1, 2, -2, -1];

Есть ли в любом случаеJavaScript может достичь этого?

Мое текущее решение:

const games = [-2, -1, 0, 1, 2];
const now = Moment();
const passedGames = [];
const upcomingGames = [];
for (let i = 0, l = games.length; i < l; i++) {
  const game = games[i];
  const hasBegun = Moment(game).isBefore(now);
  hasBegun ? passedGames.push(game) : upcomingGames.push(game);
}

return [...upcomingGames, ...passedGames];

Причина, по которой я задаю этот вопрос.Я получаю множество игр NBA, каждая из которых имеет время начала, в начале мне нужно всегда показывать самую предстоящую игру, то есть массив всегда должен начинаться с нуля.Если какая-либо игра уже началась, мне нужно перенести ее на последнюю, поэтому я ожидаю, что результат будет выглядеть следующим образом.

[0, 1, 2, -2, -1];

Ответы [ 2 ]

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

Сначала filter выведите now, later и before - затем sort и объедините их вместе:

const array = [-2, -1, 0, 1, 2, 3, 4],
now = array.filter(e => e == 0),
later = array.filter(e => e > 0),
before = array.filter(e => e < 0);

const result = [...now, ...later.sort((a, b) => a - b), ...before.sort((a, b) => a - b)];
console.log(result);
0 голосов
/ 04 апреля 2019

Array.prototype.splice(); - это то, что вам нужно для этого. Вот пример. Похоже, вам не хватает понимания с массивами, но я рекомендую вам по-настоящему понять ответы, а не копировать и вставлять их, поэтому я заставил массив продолжать работу с 10 после 9. два о циклах или массивах, кто знает.

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let inc = 10;

for(let i=0; i < array.length; i++){
  array.splice(i, 1, inc++);
};

console.log(array);

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