пройтись по массиве нное кол-во раз
всем привет!
появился вопрос. например у меня есть массив var arr = [1,2,3,4,5]; я хочу протись по массиву 2(или N раз) раза,и на втором,на елементе 3 остановиться чтобы например при 2 раз вывелось в консоль 1,2,3,4,5,1,2,3 при 3 раз вывелось в консоль 1,2,3,4,5,1,2,3,4,5,1,2,3 понятно что так никто не делает.просто интересно стало такой код не работает,так как заходим бесконечный цикл var arr = [1,2,3,4,5]; for (var i = 0;i<13;i++){ if(i === 4){ i = 0; } console.log(arr[i]); } спасибо заранее |
sizoider,
function fn(arr, p, n) { var c = [] for (var i=1; i<p; i++) {c = c.concat(arr.slice())} return c.concat(arr.slice(0,++n)) } alert(fn([1,2,3,4,5], 2, 2)); alert(fn([1,2,3,4,5], 3, 2)); |
рони,
А такой вариант не оптимальнее? Я имею ввиду по скорости. let fn = (arr, p, n) => { arr = JSON.parse( JSON.stringify(arr).repeat(p).replace(/\]\[/g,',') ); arr.splice(arr.lastIndexOf(n) + 1); return arr; } alert(fn([1,2,3,4,5], 2, 3)); alert(fn([1,2,3,4,5], 3, 3)); |
спасибо
|
в вашем варианте просто режем массивы и склеиваем их
а если мне нужно было бы с каждым элементом какую то операцию проводить которая бы зависила от результата операции над предыдущим ? |
Цитата:
<script> var arr = [1, 2, 3, 4, 5]; function fn(arr, p, n) { var c = 0, len = arr.length; return function() { return c < len * (p - 1) + n + 1 ? (c++ % len) : true } }; var x = fn(arr, 2, 2); for (var i = 0; i < 15; i++) { document.write(arr[x()] + ", ") } </script> |
круто!!!спасибо
|
Часовой пояс GMT +3, время: 15:35. |