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

trikadin 10.07.2011 21:11

Цитата:

Сообщение от Kolyaj
Ещё нужна проверка i in this

А зачем? Дурацкий вопрос, наверное... Но всё же?

Kolyaj 10.07.2011 21:29

Элементы в массиве могут быть пропущены.

var a = [1, 2, , , , 3];

trikadin 10.07.2011 21:38

Понял)) Спасибо))

float 11.07.2011 00:46

В моздоках фигурирует такая:
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(searchElement /*, fromIndex */)
  {
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (len === 0)
      return -1;

    var n = 0;
    if (arguments.length > 0)
    {
      n = Number(arguments[1]);
      if (n !== n) // shortcut for verifying if it's NaN
        n = 0;
      else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
        n = (n > 0 || -1) * Math.floor(Math.abs(n));
    }

    if (n >= len)
      return -1;

    var k = n >= 0
          ? n
          : Math.max(len - Math.abs(n), 0);

    for (; k < len; k++)
    {
      if (k in t && t[k] === searchElement)
        return k;
    }
    return -1;
  };
}

Мот кто объяснит зачем монипуляции до цикла?

trikadin 11.07.2011 01:10

Не особо-то она правильная, по-моему... Хотя не мне об этом говорить))

float 11.07.2011 01:18

Вроде в доках заявлена, как эквивалент встроенной.

trikadin 11.07.2011 02:43

Цитата:

Сообщение от float
эквивалент встроенной

Эквивалент встроенной чего? Ты на название посмотри. Мы тут each, вроде как, обсуждали. А потом плавно перешли на every/some.

float 11.07.2011 03:01

Ну я начал копаться в Array.js потом перешёл на доки от мозилы. Там вроде для всех новых методов массива есть эквиваленты. Ну индексоф и попался...

melky 11.07.2011 09:59

Цитата:

Сообщение от melky (Сообщение 112738)
подскажите, пожалуйста, как лучше всего сделать функцию обхода массива с возможностью прерывания

с прерыванием же

видно, не так это просто сделать :)


if( typeof Array.prototype.forEach === 'undefined' ) 

			Array.prototype.forEach = function( func ){
				var arrl, arr = this.reverse();
				
				do if (arrl in arr) 
						func( arr[arrl], arrl, arr );
				while( arrl -= 1 > 0 );
			}
// test ..			
var log=[];

function each( array, func ){
	
	try { array.forEach( func ) } catch(e) {};
	
}
        each( [1,2,3,"break it",4,5,6,7], function(a){ 

                        log.push(a);
                         if(  a==='break it' ) throw "";

                       } );


alert( "Прошли : \n\n"+ log.join("\n") );

Sweet 11.07.2011 10:15

Цитата:

Сообщение от melky
видно, не так это просто сделать

Использую для этого every, и не заметил никаких сложностей.


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