Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2016, 12:55
Новичок на форуме
Отправить личное сообщение для sizoider Посмотреть профиль Найти все сообщения от sizoider
 
Регистрация: 23.03.2015
Сообщений: 6

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

спасибо заранее
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2016, 13:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

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));
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2016, 13:30
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

рони,
А такой вариант не оптимальнее? Я имею ввиду по скорости.
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));
Ответить с цитированием
  #4 (permalink)  
Старый 29.03.2016, 13:38
Новичок на форуме
Отправить личное сообщение для sizoider Посмотреть профиль Найти все сообщения от sizoider
 
Регистрация: 23.03.2015
Сообщений: 6

спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 29.03.2016, 13:48
Новичок на форуме
Отправить личное сообщение для sizoider Посмотреть профиль Найти все сообщения от sizoider
 
Регистрация: 23.03.2015
Сообщений: 6

в вашем варианте просто режем массивы и склеиваем их
а если мне нужно было бы с каждым элементом какую то операцию проводить которая бы зависила от результата операции над предыдущим ?
Ответить с цитированием
  #6 (permalink)  
Старый 29.03.2016, 14:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Сообщение от 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>
Ответить с цитированием
  #7 (permalink)  
Старый 29.03.2016, 14:55
Новичок на форуме
Отправить личное сообщение для sizoider Посмотреть профиль Найти все сообщения от sizoider
 
Регистрация: 23.03.2015
Сообщений: 6

круто!!!спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск