Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #81 (permalink)  
Старый 22.08.2011, 16:30
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Еще маленькая ошибка (сам только что у себя заметил):
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() {/* ..... */};
}
Ответить с цитированием
  #82 (permalink)  
Старый 22.08.2011, 16:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Riim
Еще маленькая ошибка (сам только что у себя заметил):
Интересный кейс, спасибо. А как ты такое у себя получил?


Сообщение от Riim
Ну и проверки на (forEach, map, filter, every, some) и (reduce, reduceRight), возможно, достаточно делать по одной на всех:
Я думал над этим, чем-то мне такая проверка не нравится
Ответить с цитированием
  #83 (permalink)  
Старый 22.08.2011, 16:55
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

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

Последний раз редактировалось Riim, 22.08.2011 в 16:59.
Ответить с цитированием
  #84 (permalink)  
Старый 22.08.2011, 16:58
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А чем Array.range не угодил? Он же для перебора чисел по порядку и придуман.
Ответить с цитированием
  #85 (permalink)  
Старый 22.08.2011, 17:10
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

Последний раз редактировалось Riim, 22.08.2011 в 17:16.
Ответить с цитированием
  #86 (permalink)  
Старый 31.08.2011, 17:29
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
Интересный кейс, спасибо.
А править этот момент собираетесь? Я просто тоже юзаю подобные функции для совместимости со старыми браузерами...
Может убрать if(a in array)? Что-то ща пытаюсь представить зачем эта проверка нужна, чет туго.
Ответить с цитированием
  #87 (permalink)  
Старый 31.08.2011, 17:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Сообщение от float
Что-то ща пытаюсь представить зачем эта проверка нужна, чет туго.
Проверка на существование в массиве элемента с данным индексом.
Ответить с цитированием
  #88 (permalink)  
Старый 31.08.2011, 18:54
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
Проверка на существование в массиве элемента с данным индексом.
так в пределах 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


Цитата:
Пару часов назад запушил исправленную версию.
Ща гляну.
Ответить с цитированием
  #89 (permalink)  
Старый 31.08.2011, 19:08
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от float
так в пределах i он вроде как существует всегда, только не назначено значение...
Ну по такой логике в пределах еще и "vasyaPupkin" всенда существует, но его значение не определено:
var t = new Array(5);
alert(t.length+'\n'+t["vasyaPupkin"]);
Ответить с цитированием
  #90 (permalink)  
Старый 31.08.2011, 19:17
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

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



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

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