Удалить каждый n-вы элемент из array

363
20 ноября 2017, 21:44

Есть массив:

let array = [1,2,3,4,5];

Нужно удалить элемент на каждой 6-й итерации, пока в массиве не останется одно число.
То есть удалится сначала 1, потом 3, потом 5.
Как это сделать на JavaScript?

Answer 1

Примерно как-то так:

let arr = [1, 2, 3, 4, 5], 
  index = 0, 
  recursive = function(array) { 
    let i = 0, 
      length = array.length; 
    if (index > length) { 
      return array.filter(val => null !== val); 
    } 
    if (!length) { 
      return; 
    } 
    while (true) { 
      if (6 === i) { 
        i = 0; 
        if (!index || index) { 
          delete arr[index]; 
        } 
        index += 2; 
        return recursive(array); 
      } 
      ++i; 
    } 
  }; 
arr = recursive(arr); 
console.log(arr);

Answer 2

Текст вопроса можно интерпретировать двояко:

1) после удаления элемента счет должен заново начинаться с первого элемента массива;

2) после удаления элемента счет должен продолжаться с того же места (по принципу детской считалочки).

Соответственно, вот оба варианта:

let arr = [1, 2, 3, 4, 5]; 
const N = 6; 
 
// после удаления элемента счет начинается с начала массива 
function countOut1(arr, n) { 
  arr = [].concat(arr); // чтобы функция не имела побочных эффектов, создается копия исходного массива 
  while (arr.length > 1) { 
    let pos = (n - 1) % arr.length; 
    arr.splice(pos, 1); 
  } 
  return arr[0]; 
} 
 
// после удаления элемента счет продолжается с того же места 
function countOut2(arr, n) { 
  arr = [].concat(arr); // чтобы функция не имела побочных эффектов, создается копия исходного массива 
  let pos = 0; 
  while (arr.length > 1) { 
    pos = (pos + n - 1) % arr.length; 
    arr.splice(pos, 1); 
  } 
  return arr[0]; 
} 
 
console.log(countOut1(arr, N)); 
console.log(countOut2(arr, N));

READ ALSO
backend для сайта node

backend для сайта node

ЗдравствуйтеЯ хочу настроить Backend чтобы не нагружить страницу основную, всё работает сокеткластер тоже

345
Повторное использование кода React в React Native

Повторное использование кода React в React Native

Необходимо реализовать довольной простой сайт на React+ReduxПримерный список функций такой:

369
Повторный вызов функции после .then

Повторный вызов функции после .then

Есть функция возвращающая объект Promise и загружающая файлы через api vkКак сделать так, чтобы после удачного выполнения

270