#javascript #arrays
Вопрос:
Я пытался получить набор элементов массива через диапазон значений.
Если бы у меня был следующий массив:
const arr = ["one", "two", "three", "four", "five", "six", ...]
И если бы я хотел получить только первые четыре элемента, я бы сделал это следующим образом:
arr.slice(0, 4)
// output: ["one", "two", "three", "four"]
Но я хотел бы иметь следующие четыре элемента, то есть я хотел бы, чтобы мой результат был следующим:
// output: ["five", "six"]
Но я хотел бы сделать его динамичным, вот так:
// first set of data (first four)
getData(1)
// second set of data (next four)
getData(2)
Как я могу это сделать?
Комментарии:
1. Это плохой дизайн, потому что он требует изменения скрытого глобального состояния (это текущее смещение в массиве). Вы всегда должны избегать скрытого состояния при написании программного обеспечения.
Ответ №1:
Ваша getData
функция может вызывать slice
использование (num - 1) * 4
в качестве первого аргумента и num * 4
в качестве второго аргумента:
const arr = ["one", "two", "three", "four", "five", "six"]
function getData(offset) {
return arr.slice((offset - 1) * 4, offset * 4);
}
console.log(getData(1), getData(2));
Комментарии:
1.
num
должно быть названоoffset
так, чтобы была ясна его цель.2. Я могу согласиться с этим
3.
getData(1), getData(2)
оба будут возвращать данные с одного и того же начального смещения — я думаю, что OP хочетgetData
вести себя больше как (ужасная)strtok
функция C. Я полагаю , что это можно было бы сделатьsplice
вместоslice
этого, но никтоsplice
не должен использовать эти дни…4. Ах, я не получил этого требования от его поста re: изменение массива