Тогда получается картинка не правильная ибо должно быть написано [,"10",], а не просто [,10,].
Я не так выразился. sort обрабатывает массив, как-будто он чисто строковый. Чтобы от этого уйти нужно писать какую-нибудь доп. функцию, которая будет за него сортировать. То есть, если ниче не путаю, то одним лишь .sort нельзя отсортировать числовой массив правильно
Функция sort() по умолчанию сортирует элементы как строки. Тем не менее, в качестве параметра он принимает callback-функцию, которая принимает два аргумента (например, a и b) - два обрабатываемых элемента. Далее эта колбэк функция должна возвращать.
1. 0, если объекты трогать не нужно.
2. число < 0, если a должен быть меньше b.
3. число > 0, если b должен быть меньше a.
То есть, например, если нам нужно отсортировать массив в порядке возрастания, нужно, чтобы a был меньше или равен b. Как это сделоть? Ну, очевидно, вычесть из a b. Если они равны, будет 0, если а больше b, то b будет меньше а, если наоборот, то а будет меньше b. Т.е. слева всегда будет меньшее число.
Поэтому мы пишем примерно следующее:
array.sort((a, b) => a - b);
И получаем правильно отсортированный массивус.
Вроде нигде не ошибся, сам только познаю этот великий и могучий JavaScript.
Пишем arr.sort(compareNumeric) и не ебём мозги себе и людям
function compareNumeric(a, b) {
if (a > b) return 1;
if (a < b) return -1;
}
писать компаратор чтобы просто числа сортануть еще и без лябды это и есть ебать мозги
при том что если бы она была, то sort() бы себя так не вел, потому что он бы не знал как сравнить число и строку, но потому что в JS нестрогая типизация то он начинает автоматически приводить типы, и самое очевидное во что можно приводить типы для операции сортировки - строка, потому для не строго типизированного языка такая сортировка вполне ожидаема
Не шарите. В lua(очень похожа на js) тоже нестрогая тизация, и такой поебени там нет.
Потому что приведение как раз таки самое неочевидное поведение, учитывая что ни одной строки в этом массиве нет.
Дефолтный компаратор получает на вход number и number. И чтобы их сравнить приводит оба объекта к строке. Очевидно?
Нет, это пиздец. Это просто ужасный дизайн языка. Это мало того, что не логично, да еще и медленно.
Вот если бы там была мешанина из number и string, да, было бы разумно привести к одному типу. И то в только в рамках сравнения двух объектов разных типов.
Не путаю, lua не строготипизирован. Там тоже много неявных приведений, просто они адекватные, а не ебанизм как в js
Хочешь значит сделать сервер для небольшой игры или просто для умного дома или даже свой сайт с блекджеком. Тыкаешь разные вещи, все громоздко, долго, сложно. Вспоминаешь про nodejs и чуть ли не за 10 минут делаешь что тебе нужно. Да, js нинужен.
ааа) а то подумал что питон усё, кончилась эра)
под андроид ява я так понимаю?
всё никак руки не доходят до нее, хоть и накачал уже всё под это дело)
Он сильно отличается от других языков что сбавляет пыл при его изучении. Кстати в js тоже самое с callback'ами.
В JS есть много чего, что может порадовать неокрепшие умы: scope, callback, promise, call & apply, prototype, then, chain. Хотя на данный момент появилось не меньше хороших статей, объясняющих все это легко и просто.
scope - такой же как и в других языках
call&apply - как помню это что-то типа как в с# передаваемые делегаты в метод
prototype - несколько непонятный, но многие тупят представляя, что это классы, но на самом деле это не совсем так. Однако в новой версии языка добавили "классы", которые как обертка над prototype и теперь с этим проблем не должно быть.
В других языка область видимости переменных ограниченна блоком, в JS область видимости ограниченна функцией. На этом так же строятся замыкания.
var a = 10;
~function test()
{
for(var i = 0; i < 1; i++){
var a = 20;
}
console.log(a); //ups, print 20
}()
Постоянно кто-нибудь из изучающих задает подобный вопрос и типичные ответы с созданием функции со своей областью видимости: https://ru.stackoverflow.com/questions/433887/Почему-асинхро...
------
Делегаты в C# являются обычными функциями в переменной, в JS с этим вообще проблем нет `var a = function(){ }`. А call&apply просто подменяют контекст this для функции - используются для заимствования функций, краткий пример, как вызвать функции массивов на объектах.
var data = {0:"Martin", 1:78, 2:67, 3:["Letta", "Marieta", "Pauline"], length:4};
console.log(Array.prototype.indexOf.call(data, "Martin") === -1 ? false : true);
console.log(Array.prototype.reverse.call(data));
console.log(Array.prototype.push.call(data, "Jackie"));
В общем-то можно заменить наследование в class или прототипированием как по старинке. Но все же такая возможность существует.
-----
Классы конечно важны, но как говорится, всегда можно углубиться в язык для его лучшего понимания и создания более эффективного или компактного кода.
В новой версии js пофикшена область видимости если использовать "strict" и let.
В c# можно в метод передать другой метод через делегат. Получится фактически тоже подмена контекста ибо делегат может быть чем угодно и делать что угодно.
Про let я знаю, но как факт scope на функциях остался и никуда не делся.
Все же call&apply работают немного по другому, тут основной упор делается на подмене this, использовав чужой класс к примеру, а не на передачу функции куда-то еще. Поскольку c# язык строгой типизации, сложно дать пример. Хорошим примером являются методы расширения в C#. Хорошей новостью, что пример с делегатами и рефлексией уже написан на SO и мне не надо придумывать его: https://stackoverflow.com/questions/19546986/c-sharp-equival...
всегда же есть "профессионалы" вопящие о никчёмности языка, а по факту о собственной некомпетентности.
Я говорю о его никчемности каждый раз, когда с ним сталкиваюсь. А знаешь почему? Потому что Adobe еще в 2006 году полностью реализовала драфт стандарт EcmaScript Harmony с классами, возможностью использовать строгую типизацию и библиотекой из 300+ высокоуровневых классов для работы с 2D графикой и полноценной IDE для Flash, а потом еще 3D в Adobe Molehill залепила под GPU в 2010. Прошло 12 лет, а JS может похвалится только половиной всего этого, развивается как черепаха.
Вот эту красоту я запускал в 2010 со своего старенького компа в браузере и оно работало: https://www.youtube.com/watch?v=tgwi0lWgX8w Жаль сейчас все ссылки уже битые.
P. S> Сори, накипело.
работает как говно, через пень колоду..течет памятью и отклик как у андроида 2.1 на 128 мегах памяти...зато за 10 минут и мозги включать даже не надо...ах да, жрет еще как не в себя
если б все так было плохо им бы никто не пользовался, а так живет и радуется жизни. может ты его плохо настраивал что он работал как говно?)
включить мозги, выбрать наиболее подходящий способ реализации и сделать его, а не лепить из говна и палок, абы было.
Ну вот человек и выбрал наиболее подходящий для него способ реализации. Годами лепить тру-энтерпрайз не все могут себе позволить.
А какой минимальный инстанс под него нужен, скажем, на Amazon AWS? Ну или где вы предложите его запускать?
любой VPS, прекрасно запускается на LInux + Docker, при этом пулы едят меньше пмяти чем на винде, скорость примерно равно node js, но плюсом идёт типо безопасность, не только на этапе компиляции.
go. он специально проектировался чтобы даже дауны(и даже разработчики из js комьюнити) могли писать нормальный код
Подкинь пару статей как делать post\get запросы в nodejs с html страницы и сохранять\выводить в json. Только без express или баз данных.
Кто-нибудь может мне объяснить в чем прикол динамической типизации? В функциях же всё равно обращяются в переменными как с переменными определенного типа, или я чего то не понимаю?
Намного меньше постоянной ебли с приведением типов, интерфейсами и прочей ерундой. Если стоит задача хуяк-хуяк и в продакшен, а не сделать надолго и качественно то динамическая типизация лучший выбор
как вы заебали байками про то что надолго и качественно нельзя на динамическом языке. Все можно смотри на Youtube, Instagram, Dropbox, Yelp, Bitbucket и тд
Язык не определяет качество, да на динамическом языке есть больше вариантов наговнокодить, но никто ж не мешает строить архитектуру и использовать нормальные принципы разработки.
Проблема динамического языка не в языке а в людях. Порог входа значительно ниже вот и долбоебов хватает которые не знают другого вариант написаная программ кроме как постоянные костыли и велосипеды, которые через год-два уже невозможно поддерживать.
Где я написал что надолго и качественно нельзя на динамическом? Просто это сложнее чем на статическом.
на динамическом языке есть больше вариантов наговнокодить
Именно это я и имел ввиду.
которые через год-два уже невозможно поддерживать.
через год-два
Ебать вы оптимист
В теории это повышает скорость написания программы. А вообще: https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC...
IT-юмор
5.7K постов52.6K подписчиков
Правила сообщества
Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору