#javascript #html
#javascript #HTML
Вопрос:
Я работаю над функцией, которая принимает положительное целое число n, например, 5 должно создать массив // [1,2,3,4,5], затем каждый элемент должен вытеснять следующий, в то время как последнему элементу нечего отображать, поэтому он становится первым элементом, пока не останется 1 элемент
[1,2,3,4,5] => [1,3,5] => [5,1,3] => [5,3] => [3,5] = > [3]
Я подошел к этому так, но не смог определить источник ошибки.
function displaceMent(n){
let arr = [];
for(let i = 1; i <= n; i ) arr.push(i);
let j = 0;
while(arr.length > 1){
arr = arr[j 1] === arr.slice(-1) ? arr.splice(-1).concat(arr) : arr.splice(j 1, 1);
j ;
}
return arr;
}
console.log(displaceMent(5))
<!DOCTYPE html>
<html>
<head>
<title>Beating Game</title>
</head>
<body>
<script src="game.js"></script>
</body>
</html>
Комментарии:
1. Вы пробовали какое-либо из двух решений?
Ответ №1:
Это то, что вы хотите?
function displacement(n) {
var arr = [];
for(let i = 1; i <= n; i ) arr.push(i);
var i, j = 0;
var times;
while (arr.length != 1) {
document.body.innerHTML = arr "<br>";
times = Math.floor(arr.length/2);
for (i = 0; i < times; i )
arr.splice(i 1, 1);
document.body.innerHTML = arr "<br>";
arr.unshift(arr.pop());
}
}
displacement(5);
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
</body>
</html>
Теперь перейдем к вашему первоначальному вопросу. Как только вы запустите arr = arr[j 1] === arr.slice(-1) ? arr.splice(-1).concat(arr) : arr.splice(j 1, 1);
, произойдет следующее.
- Поскольку
arr[j 1] === arr.slice(-1)
значение равно false,j 1
элемент удаляется изarr
bysplice
. - Возвращаемое значение —
splice()
это значение, удаленное им изarr
. В данном случае это 2. arr
присваивается2
.arr.length > 1
условие становится ложным.- Цикл останавливается.
Ответ №2:
Мой ответ немного отличается, поскольку он не заменяет последний на первый, если он был смещен, что даст ответ, отличный от приведенного выше, если n
установлено значение, скажем, 7.
const displace = (n) => {
let a = Array.from(Array(n)).map((_, i) => i 1);
while (a.length > 1) {
console.log(a);
a = a.reduce((p, c, i, a) => {
i % 2 === 0 amp;amp; p.push(c);
a.length % 2 !== 0 amp;amp; p.unshift(p.pop());
return p;
}, []);
}
return a;
};
console.log(displace(5));