Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   пройтись по массиве нное кол-во раз (https://javascript.ru/forum/misc/62200-projjtis-po-massive-nnoe-kol-vo-raz.html)

sizoider 29.03.2016 12:55

пройтись по массиве нное кол-во раз
 
всем привет!
появился вопрос.
например у меня есть массив
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]);
}

спасибо заранее

рони 29.03.2016 13:10

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));

destus 29.03.2016 13:30

рони,
А такой вариант не оптимальнее? Я имею ввиду по скорости.
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));

sizoider 29.03.2016 13:38

спасибо

sizoider 29.03.2016 13:48

в вашем варианте просто режем массивы и склеиваем их
а если мне нужно было бы с каждым элементом какую то операцию проводить которая бы зависила от результата операции над предыдущим ?

рони 29.03.2016 14:25

Цитата:

Сообщение от sizoider
а если мне нужно было бы с каждым элементом какую то операцию проводить

<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>

sizoider 29.03.2016 14:55

круто!!!спасибо


Часовой пояс GMT +3, время: 15:35.