Какой самый быстрый способ получить диапазон существующих членов из массива? - PullRequest
0 голосов
/ 24 апреля 2020

У нас есть массив, заполненный так:

const arr = [];
arr[3] = 'content3';
arr[4] = 'content4';
arr[6] = 'content6';
arr[7] = 'content7';

Теперь мы хотим получить существующие элементы, начиная с индекса 3 и заканчивая индексом 6. Вот наивный подход:

const slice = arr.slice(3,7); // ["content3", "content4", empty, "content6"]
const cleanSlice = slice.filter(a => a); // ["content3", "content4", "content6"]

Есть ли способ прочитать диапазон, который не включает пустые элементы?

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете фильтровать с обратным вызовом, который возвращает true для каждого вызова (также для получения ложных элементов). Этот подход не посещает разреженные элементы.

const array = [];

array[3] = 'content3';
array[4] = undefined;
array[6] = 0;

const result = array.filter(_ => true);

console.log(result);

Взяв объект и массив для диапазона, вы можете отфильтровать ключи и отобразить значения.

const data = {};

data[3] = 'content3';
data[4] = undefined;
data[6] = 0;
data[7] = 'content7';

const range = [3, 6];
const result = Object
    .keys(data)
    .filter(k => k >= range[0] && k <= range[1])
    .map(k => data[k]);

console.log(result);
...