Рекурсивно получить каждый n-й элемент из массива Javascript - PullRequest
0 голосов
/ 14 июля 2020

У меня есть массив цветов, который мне нужен, чтобы рекурсивно получить каждый n-й элемент для создания легенды. Массив цветов может выглядеть примерно так:

[
'red',
'dark_red',
'dark_dark_red',
'green',
'dark_green',
'dark_dark_green',
'blue',
'dark_blue',
'dark_dark_blue'
]

У меня есть переменное количество элементов легенды, для которых я хочу создать цвета. Я хочу иметь возможность генерировать цвета на основе индекса при просмотре элементов легенды в таком шаблоне:

1 - green
2 - blue
3 - dark_red
4 - dark_green
5 - dark_blue
6 - etc...

Как я могу go об этом? Я пробовал использовать модуль и оператор double-l oop, но не смог правильно сгенерировать цвета.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Чтобы получить nthItems:

function nthItems(array, n){
  const r = [];
  for(let i=n-1,l=array.length; i<l; i+=n){
    r.push(array[i]);
  }
  return r;
}
const a = [
  'red',
  'dark_red',
  'dark_dark_red',
  'green',
  'dark_green',
  'dark_dark_green',
  'blue',
  'dark_blue',
  'dark_dark_blue'
];
console.log(nthItems(a, 2));
console.log(nthItems(a, 3));
0 голосов
/ 14 июля 2020

Ответ StackSlave - самый эффективный способ, но если вам нужен рекурсивный способ, вы можете сделать

const a = [
  'red',
  'dark_red',
  'dark_dark_red',
  'green',
  'dark_green',
  'dark_dark_green',
  'blue',
  'dark_blue',
  'dark_dark_blue'
];

const nthItems = (array, n) => {
  const results = [];
  const addItem = index => {
    if (index < array.length) {
      results.push(array[index]);
      addItem(index + n);
    }
  };
  addItem(0);
  return results;
};

console.log(nthItems(a, 2));
console.log(nthItems(a, 3));

Но это рекурсивно чисто ради рекурсии, оно добавляет значения в стек без необходимости, когда подойдет a for l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...