Извлекайте фрагменты массива с использованием смещения с учетом состояния

#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: изменение массива