Условное выполнение
вместо if(success) obj.start(); else obj.stop();
obj[success?’start’:’stop’]();
или success?obj.start():obj.stop();
Подстановки в шаблоне
text = text.split(‘{‘ + i + ‘}’).join(replacements[i])
Генерирование случайных строчек
s+=String.fromCharCode(Math.floor(26+Math.random()*50)); в цикле.
Можно гораздо проще:
Math.random().toString(33).substr(2); — в методе Number.toString параметр означает основание системы счисления.
Генерирование битовых масок
(123).toString(2) // 111011
Битовая маска в массиве: (123).toString(2).split(»).reverse().map(function(item) { return +item; });
Что быстрее — проверять равенство строчек или boolean?
http://jsperf.com/string-vs-bool-equals
строчки быстрее, но всего на 20%. Когда удобнее — можно ограничится строчками вместо булевского флага.
Что быстрее — конкатенация строк или join?
http://jsperf.com/catethysis-concat/2
конкатенация гораздо быстрее, однако join хардкод-символов не сильно медленнее. Хотя их проще сразу упаковать в строчку.
Уловки map
([‘1′, ‘2’, ‘3’]).map(parseInt) // [1, NaN, NaN]
([1, 2, 3]).map(toString) // [undefined, undefined, undefined]
Map передаёт три параметра (item, index, list), а parseInt и toString вторым параметром принимают основание системы счисления.
Сгруппировать слова из одинаковых букв
var in_words=['абв', 'днш', 'вба'];
var sorted_words=[];
in_words.forEach(function(item, index) {
sorted_words.push(item.split('').sort().join(''));
});
console.log(sorted_words); // ['абв', 'днш', 'абв']
var hash={};
for(var i in sorted_words) hash[sorted_words[i]]=1;
var unique_words=Object.keys(hash); // ['абв', 'днш']
var out_words=[];
for(var i in unique_words) {
var out_word=[];
for(var j in sorted_words)
if(unique_words[i]==sorted_words[j])
out_word.push(in_words[j]);
out_words.push(out_word);
}
console.log(out_words);
Двоичный хеш
Для объединения большого количества массивов с элементами из небольшого списка удобнее не объединять в цикле массивы, а заранее назначить двоичный хеш каждому массиву, и объединять хеши побитовым И. Хеш из простых чисел не работает, поскольку содержит неоднозначные соответствия хеш<->массив.
JSperf.com
Очень удобен для выбора оптимальной реализации алгоритма.
Удаление дубликатов
var hash={};
for(var i in arr) hash[arr[i]]=1;
var unique_arr=Object.keys(hash);
Свежие комментарии