Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Библиотечка . (https://javascript.ru/forum/project/6025-bibliotechka.html)

Riim 22.08.2011 16:30

Еще маленькая ошибка (сам только что у себя заметил):
var r = (new Array(5)).map(function(I, i) {
	return i;
});
alert(r.length);


Выводит "0", при нативной реализации выводит "5".

Ну и проверки на (forEach, map, filter, every, some) и (reduce, reduceRight), возможно, достаточно делать по одной на всех:
if (!('forEach' in arrayProto)) {
	arrayProto.forEach = function() {/* ..... */};
	arrayProto.map = function() {/* ..... */};
	arrayProto.filter = function() {/* ..... */};
	arrayProto.every = function() {/* ..... */};
	arrayProto.some = function() {/* ..... */};
}

if (!('reduce' in arrayProto)) {
	arrayProto.reduce = function() {/* ..... */};
	arrayProto.reduceRight = function() {/* ..... */};
}

Kolyaj 22.08.2011 16:44

Цитата:

Сообщение от Riim
Еще маленькая ошибка (сам только что у себя заметил):

Интересный кейс, спасибо. А как ты такое у себя получил?


Цитата:

Сообщение от Riim
Ну и проверки на (forEach, map, filter, every, some) и (reduce, reduceRight), возможно, достаточно делать по одной на всех:

Я думал над этим, чем-то мне такая проверка не нравится :)

Riim 22.08.2011 16:55

Цитата:

Сообщение от Kolyaj
А как ты такое у себя получил?

как заметил? Пытаюсь придумать как обходиться без Array.range , хотя бы в простейших случаях, и не писать:
var range = [], i = 10;
while (i) {
    range[--i] = i + 1;
}
alert(range);

хотя и так нормально, в общем вечер свободный, вот и маюсь.

Kolyaj 22.08.2011 16:58

А чем Array.range не угодил? Он же для перебора чисел по порядку и придуман.

Riim 22.08.2011 17:10

Цитата:

Сообщение от Kolyaj
А чем Array.range не угодил?

хочу оставить самое необходимое.

float 31.08.2011 17:29

Цитата:

Интересный кейс, спасибо.
А править этот момент собираетесь? Я просто тоже юзаю подобные функции для совместимости со старыми браузерами...
Может убрать if(a in array)? Что-то ща пытаюсь представить зачем эта проверка нужна, чет туго.

Kolyaj 31.08.2011 17:51

Пару часов назад запушил исправленную версию.

Цитата:

Сообщение от float
Что-то ща пытаюсь представить зачем эта проверка нужна, чет туго.

Проверка на существование в массиве элемента с данным индексом.

float 31.08.2011 18:54

Цитата:

Проверка на существование в массиве элемента с данным индексом.
так в пределах i он вроде как существует всегда, только не назначено значение...

var t = new Array(5);
alert(t.length+'\n'+t[0]);

var t = [];
t[0] = 1;
t[100] =1;
t.length


Стандартным методам походу плевать undefined там или что другое...

var r = new Array(5);
r[2] = 1;
var t = r.map(function(c, i, m) {
    return ++m[i];
})
t.length // стандарт 5, с проверкой 3


Цитата:

Пару часов назад запушил исправленную версию.
Ща гляну.

Sweet 31.08.2011 19:08

Цитата:

Сообщение от float
так в пределах i он вроде как существует всегда, только не назначено значение...

Ну по такой логике в пределах еще и "vasyaPupkin" всенда существует, но его значение не определено:
var t = new Array(5);
alert(t.length+'\n'+t["vasyaPupkin"]);

float 31.08.2011 19:17

всё я догнал зачем такие сложности.
Стандартная функция не вызывает fn если элемент undefined.
var t = new Array(5);
t[1] = 1;
t.map(function(c, i) {alert(i); return 2;});


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