Есть массив:
let array = [1,2,3,4,5];
Нужно удалить элемент на каждой 6-й итерации, пока в массиве не останется одно число.
То есть удалится сначала 1, потом 3, потом 5.
Как это сделать на JavaScript?
Примерно как-то так:
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);
Текст вопроса можно интерпретировать двояко:
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));
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости