Создайте массив со значениями, которые являются диапазоном, кратным 7, используя javascript

avatar
32423hjh32423
8 апреля 2018 в 11:36
57
3
-2

Мне нужен самый современный способ сделать такой массив

const nextchunk = [];
nextchunk[0] = [0, 6];
nextchunk[1] = [7, 13];

Каждый следующий фрагмент должен иметь 7 позиций, как показано. Они представляют собой предельный запрос позже в коде. Итак, nextchunk[1] вылезает пункт 7-13, nextchunk[2] вылезает 14-20

Я хотел бы иметь возможность вызывать nextchunk[20] во время выполнения и возвращать правильные значения.

Источник
Bergi
8 апреля 2018 в 11:42
1

Начните с использования цикла для их создания, затем перейдите к Array.from({length: 21}, (_, i) => …) или что-то подобное

32423hjh32423
8 апреля 2018 в 11:57
0

Удивительно. -3 еще 3 ответа от очень опытных стекеров - это говорит об обратном.

Bergi
8 апреля 2018 в 12:07
2

Вы знаете, что отрицательные голоса за вопрос означают «Этот пост не показывает никаких усилий»? Вы все еще можете редактировать, чтобы улучшить.

Ответы (3)

avatar
Jonas Wilms
8 апреля 2018 в 11:42
5
   function chunks(size) {
     return function getChunk(index) {
       return [size * index, size * (index + 1) - 1];
     }
   }

   const nextchunk = chunks(7);
   console.log(
      nextchunk(0), 
      nextchunk(1), 
      nextchunk(20)
   );

Вы можете легко рассчитать значение. Нет необходимости генерировать его до того, как он действительно понадобится. Если вам действительно нужен массив, его легко создать с помощью верхнего помощника:

  const nextchunk = Array.from({length: 21}, (_, i) => chunks(7)(i));
  console.log(nextchunk[20]);
Bergi
8 апреля 2018 в 11:45
1

…кроме тех случаев, когда вам нужно nextchunk(0) == nextchunk(0)

Mohammad Usman
8 апреля 2018 в 11:48
0

Я предполагаю, что имя возвращаемой функции (get) немного лишнее, так как оно нигде не используется.

Jonas Wilms
8 апреля 2018 в 11:49
2

@mohammad улучшает читаемость и помогает отладке.

avatar
Yury Tarabanko
8 апреля 2018 в 11:54
4

Я хотел бы иметь возможность звонить nextchunk[20] по номеру время выполнения и вернуть правильные значения.

Хотя я не рекомендую использовать этот подход в производственной среде (главным образом потому, что вы не сможете транспилировать его для работы в старых js-движках), но вы можете получить синтаксис nextchuck[20] с помощью Прокси.

// just for fun
const nextChunk = new Proxy([], {
  get(target, prop) {
    const maybeIndex = parseInt(prop, 10)
    const has = Reflect.has(target, prop)
    const value = Reflect.get(target, prop)
    
    if (has) { 
      return value
    }
    
    if(!Number.isNaN(maybeIndex)) {
      const newValue = [maybeIndex * 7, 6 + maybeIndex * 7]
      Reflect.set(target, prop, newValue );
      
      return newValue;
    }
    
    return value;
  }
});

console.log(nextChunk[0], nextChunk[1], nextChunk[20])
console.log(nextChunk[0] === nextChunk[0])
Jonas Wilms
8 апреля 2018 в 12:01
0

Определенно самый креативный подход :)

Yury Tarabanko
8 апреля 2018 в 12:05
2

@ДжонасВ. На этой неделе использовались прокси для некоторых PoC-кодов. :) Просто не могу перестать видеть их повсюду.

avatar
Nenad Vracar
8 апреля 2018 в 11:47
2

Вы можете создать пользовательскую функцию, которая принимает массив и number и добавляет новый элемент в массив на основе ваших вычислений.

const arr = [];
const nextchunk = (array, chunk) => {
  const start = chunk * 6 + chunk;
  array.push([start, start + 6])
}

nextchunk(arr, 0);
nextchunk(arr, 1);
nextchunk(arr, 2);
nextchunk(arr, 20);

console.log(arr)