Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Array each function (https://javascript.ru/forum/misc/18666-array-each-function.html)

melky 11.07.2011 10:20

какая разница между forEach и every, например, в моей задаче (прерывание) ?

даже передают обе одинаковые аргументы - член массива, ключ, весь массив

Kolyaj 11.07.2011 11:58

melky,
ещё один неправильно реализующий стандартные функции.

melky 11.07.2011 13:20

if( typeof Array.prototype.forEach === 'undefined' )
   Array.prototype.forEach = function (iterator, context) {
    for (var i = 0, length = this.length >>> 0; i < length; i++) {
      if (i in this) iterator.call(context, this[i], i, this);
    }
  }


Prototype.js

я просто с ума от изящества

но зачем делать так ?
this.length >>> 0

Пример: это же Math.floor
alert ( [ "_______","|examples :","_______", "|9 >>> 0", "=> "+ (9 >>> 0), "| 9.8 >>> 0", "=> "+ (9.8 >>> 0), "_______"].join("\n") );


можно было и так, Kolyaj :)
if( typeof Array.prototype.forEach === 'undefined' )
   Array.prototype.forEach =  function(fn, ctx) {
            for (var i = 0, l = this.length; i < l; i++) 
                       if (i in this)   
                           fn.call(ctx, this[i], i, this);
        };


ну а прерывать как? через метание ?

melky 11.07.2011 13:55

http://jsperf.com/array-each.

Я думаю, nuff said;

всем спасибо.

Kolyaj 11.07.2011 14:09

melky,
а зачем ты мой ник приписал к функции, к которой я не имею никакого отношения?

melky 11.07.2011 14:14

да ладно. какая разница?

Kolyaj 11.07.2011 14:16

Непонятен смысл твоего сравнения. Ты сравниваешь плохую реализацию (throw) с неправильной (i--).

melky 11.07.2011 14:18

это не реализация функции по-умолчанию, а написание своей, с возможностью прервать её, Kolyaj

сколько способов реализации знаю, так и написал :)

tenshi 14.07.2011 13:03

использовать исключения плохо

к тому же, они прерывают только 1 цикл, а сразу два вложенных не умеют. и вообще, использовать исключения в штатной ситуации - надо быть совсем упоротым.

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

monolithed 14.07.2011 13:21

Цитата:

Сообщение от melky
но зачем делать так ?
this.length >>> 0

во-первых, для инвертирования типа к целочисленному значению (иногда может быть удобней чем унарный +)

alert([typeof '10', typeof ('10' >>> 0)])


во-вторых, для того чтобы предотвратить выход за пределы максимально допустимого диапазона чисел.


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