2016-12-13 4 views
0

В Ruby мы можем восстановить каждый цикл для массива, используя цикл 1) while, 2) инструкцию yield (передать значение блоку) и 3) класс Array (чтобы сделать метод доступным для класса Array); следующим образом:Javascript forEach loop - Как его восстановить?

class Array 
    def reconstructed_each 
     n = 0 
     while n < self.length 
      yield(self[n]) 
      n += 1 
     end 
     self 
    end 
end 

В Javascript я реконструировал цикл forEach для массива с использованием аналогичного способа; следующим образом:

Array.prototype.reconstructedforEach = function(c) { 
    var n = 0; 
    while (n < this.length) { 
     c(this[n]); 
     n += 1; 
    } 
}; 

Та часть я не уверен, о том, как сделать выше функции доступны только массивы, но не другие типы объектов, например, номер.

ОБНОВЛЕНИЕ: У меня это выяснено. Вышеупомянутый фрагмент кода был отредактирован соответствующим образом.

+0

Ваш код рубин сломана: вы используете '[]' метод, но этот метод не является частью протокола 'Enumerable'. То же самое относится к 'length'. Кроме того, 'each' должен возвращать' Enumerator' при вызове без блока, который ваш метод не делает. –

ответ

0

Вы просто ищете способ итерации массива javascript с использованием while-construct?

если так:

const arr = ["some", "value", "here"]; 
let i =0; 

while(i < arr.length){ 
//use contents of arr[i] to do something useful 
i++; 
} 

Может быть, я что-то

+0

Нет. Я пытаюсь увидеть, что находится под капотом цикла forEach. –

0

Может быть, вы ищете что-то вроде функции генератора не хватает?

const myArray = [1,2,3,4,5]; 
function* constructEach(){ 
    let index = 0; 
    while(index < 3) 
    yield myArray[index++]; 
} 

var gen = constructEach(); 

console.log(gen.next().value); // 0 
console.log(gen.next().value); // 1 
console.log(gen.next().value); // 2 
console.log(gen.next().value); // undefined 

(Этот пример был бессовестно украдены из MDN)