Мне было трудно сформулировать заголовок, чтобы описать проблему, с которой я столкнулся, однако я надеюсь, что пример будет полезен. У меня есть массив объектов JavaScript, который выглядит примерно так:
const myPlayer = "jim"
const myArray =
[
{"player":"bob", "points":11},
{"player":"joe", "points":15},
{"player":"nik", "points":18},
{"player":"tom", "points":21},
{"player":"jim", "points":25},
{"player":"ron", "points":26},
{"player":"tim", "points":32},
{"player":"jon", "points":35},
{"player":"len", "points":42},
{"player":"eva", "points":51}
];
Мой массив сортирует объекты по ключу points , и я хотел бы отфильтровать этот массив, чтобы сохранить (a) объект, ключ которого player совпадает с myPlayer переменная, а также (b) 2 объекта до и 2 объекта после объекта, который соответствует переменной myPlayer . Например, в этом случае я хотел бы вернуть следующее:
const filtArray =
[
{"player":"nik", "points":18},
{"player":"tom", "points":21},
{"player":"jim", "points":25},
{"player":"ron", "points":26},
{"player":"tim", "points":32}
];
... поскольку nik и tom - это два объекта до jim, а ron и tim - два объекта после tim. Клавиша player будет иметь уникальное значение для каждого объекта, поэтому никогда не будет двух объектов с одинаковой клавишей player .
Последняя часть этого вопроса - я бы хотел, чтобы отфильтрованный массив всегда содержал 5 объектов. Поэтому, если myPlayer = "bob"
, где bob является игроком в самом первом объекте, я бы хотел, чтобы он просто возвращал первые 5 объектов, например:
[
{"player":"bob", "points":11},
{"player":"joe", "points":15},
{"player":"nik", "points":18},
{"player":"tom", "points":21},
{"player":"jim", "points":25}
];
... с похожим выводом, если myPlayer = "joe" или myPlayer = "len" или "eva".
Любая помощь с этим приветствуется, спасибо !!
Edit: похоже, у меня просто была небольшая ошибка в моем коде, которая нарушала мой подход ... есть следующее, которое использует findIndex и slice:
const index = myArray.findIndex(x => x.player === myPlayer);
filtArray = myArray.slice(index-2, index+2)