- 1
new Array(100).map(function(x) { return Math.random() * 1000; });
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+160
new Array(100).map(function(x) { return Math.random() * 1000; });
Угадайте результат.
bormand 25.10.2012 17:57 # +5
Мда. Массив длины 100, в котором нет ни одного ключа, и на котором, очевидно, не работают мапы...
new Array(3) - тут length == 3, все элементы undefined, но мап не видит элементов.
[undefined, undefined, undefined] - тут тоже length == 3, все элементы undefined, но мап все видит.
А я думал такой бредовый пиздец это прерогатива с++ и php...
wvxvw 25.10.2012 18:04 # +4
bormand 25.10.2012 18:42 # 0
Отвечу сам себе - нет, тоже не видит. Т.е. этот конструктор мало того, что совершенно бесполезен, так еще и не дает возможность запилить инициализированный массив из одного элемента: new Array(1,2) можно, а new Array(1) - нет.
wvxvw 25.10.2012 18:47 # +1
Неа.
zloirock 25.10.2012 20:32 # 0
bormand 25.10.2012 20:36 # +1
console.time('qwe');
console.time('asd');
P.S. Уже третий линк на хабр за сегодня.
LispGovno 25.10.2012 20:41 # +2
метастазы
LispGovno 25.10.2012 20:41 # +1
во всех кинотеатрах страны
bormand 25.10.2012 21:07 # 0
wvxvw 25.10.2012 20:59 # +1
На заре моей програмистской карьеры мне довелось писать клиент к "бинго" игрушке, конечно, игра очень простая, но и не совсем рандом. Т.е. конечно, рандом, но инфраструктура привязаная к сюжету занимает больше, чем сюжет. "Сервер" к этой игре слабал какой-то народный зодчий на С#, работало оно плохо даже по тогдашним представлениям, и код был вообще ужас. Но 3-4 тысячи клиентов в пиковые часы обслуживал.
zloirock 25.10.2012 21:24 # 0
bormand 25.10.2012 21:26 # 0
P.S. 20-30 игр это получается 80-120 человек, если они играют 2х2.
zloirock 25.10.2012 21:30 # +1
bormand 25.10.2012 21:43 # 0
bot 25.10.2012 19:09 # +1
zim 25.10.2012 20:58 # +2
wvxvw 25.10.2012 19:19 # +4
Зато можно так :)
ZX_Spectrum 25.10.2012 21:00 # −1
wvxvw 25.10.2012 22:38 # +2
ZX_Spectrum 26.10.2012 20:14 # 0
А еще можно в качестве второго параметра передавать функцию, которая будет вычислять значение элемента массива в зависимости от его индекса.
Но на самом деле всё это не нужно.
torbasow 29.10.2012 14:15 # 0
Или даже просто так:
wvxvw 29.10.2012 14:26 # +1
torbasow 29.10.2012 15:05 # +1
wvxvw 29.10.2012 17:34 # 0
Это мало кто знает, и никто не пользуется, но, например, 2 точки подряд в жабоскрипте используются в одном случае, когда у литерала числа в десятеричном представлении нужно вызвать какую-то функцию. Т.е. 100..toString() например, а в неутвержденном, но реализованом E4X те же две точки значать выборку всех наследников у XML / XMLList.
Ну а с появлением трех точек, возможно появятся смешные опечатки. Особенно принимая во внмимания большую нелюбовь жабоскриптеров к синтаксису в целом игнорирование пробелов в частности.
LispGovno 29.10.2012 17:41 # 0
It's new sport game for programmers.
torbasow 29.10.2012 18:31 # 0
torbasow 29.10.2012 18:52 # 0
ZX_Spectrum 29.10.2012 17:26 # 0
zloirock 29.10.2012 18:47 # 0
torbasow 29.10.2012 18:54 # 0
zloirock 29.10.2012 18:58 # 0
Первый new Array, второй [], а возвращается тот, что создается map.
torbasow 30.10.2012 05:40 # 0
wvxvw 29.10.2012 20:06 # 0
zloirock 29.10.2012 20:36 # 0
Представленный выше велосипед:
1. Создаём пустой массив и устанавливаем его длину в 100.
2. Создаём из этого массива List(массив аргументов) из, соответственно, 100 элементов, каждый из которых будет undefined.
3. Создаём еще один массив через [] с сотней аргументов undefined.
4. Получаем массив из 100 элементов undefined.
5. Создаём еще один пустой массив и устанавливаем его длину в 100.
6. Создаём калбэк, возвращающий рандомное значение, помноженное на 1000.
7. 100 раз проверяем наличие элемента во 2ом массиве, если есть запускаем калбэк с этим значением, пишем результат по такому-то индексу в конечный массив.
Велосипед с push:
1. Создаём пустой массив и переменную, инициализированную в 100.
2. 100 раз декрементируем значение переменной, пишем рандомное значение, помноженное на 1000, в массив и инкрементируем его длину.
wvxvw 29.10.2012 20:40 # 0
zloirock 29.10.2012 21:01 # 0
wvxvw 29.10.2012 21:05 # 0
wvxvw 29.10.2012 20:50 # 0
push - вызов API функции, который предполагает кучу разных проверок, оберток, он и системное время прочитает, и может даже какие-то временные объекты в памяти разместит и т.д. Т.как это функция с варируемым числом аргументов, то и для аргументов еще обертка есть.
Типично предполагать, что динамические массивы будут выделять память постепенно, удваиавая ее. Т.е. если вы начнете с массива с нулевой длиной, то он будет расти когда вы добавите в него второй, четвертый, восьмой и т.д. элементы, конечно, в реальности начинает расти с каких-нибудь пары тысяч, т.как выделяется с запасом в рассчете на то, что жабоскриптерам особо большие массивы все равно ни к чему, то, в принципе, догадка неплохая.
Таким образом, если вы не записываете просто по индексу значение, вся эта механика усложняется тем, что нузно каждое какое-то время перевыделять память под массив, копировать и т.д.
Далее, память под массив, по крайней мере в AS выделяется при создании, и выделяется ее столько, сколько было указано в конструкторе, таким образом последующие записи по индексу становятся элементарными операциями. В случае с жабоскриптом, получаем что таких примитивных операций просто нет, т.как нельзя предварительно заготовить память, и пользоваться push - вобщем-то то же самое, что и записывать по индексу.
Еще большая лажа начинается, когда в массиве пропущены элементы, и часть массива существует в памяти как массив, а часть, - как хеш-мап, и там тоже свои усложнения, с которыми push так или иначе столкнется, хеширование ключей, слежение за тем, чтобы "сумки" куда ключи складываются не наполнялись выше какого-то определенного предела - все это не нужно при обычной записи по индексу.
zloirock 29.10.2012 21:06 # 0
wvxvw 29.10.2012 21:13 # 0
А в браузерном жабоскрипте никто и не замахивается на какие-то серьезные вещи. Даже какой-нибудь примитивный редактор звука - уже облом изза плохой, по определению и задумке реализации массивов. А видео редактора на жабоскрипте мы, при нашей жизни, скорее всего и не увидим никогда.
zloirock 29.10.2012 21:39 # 0