В спецификации часто используется нумерованный список для определения шагов алгоритма. Эти алгоритмы используются для точного определения требуемой семантики языковых конструкций ECMAScript. Алгоритмы не предназначены для использования каких-либо конкретных методов реализации. На практике могут существовать более эффективные алгоритмы для реализации данной функции. Алгоритмы могут быть явно параметризованы упорядоченной последовательностью псевдонимов, разделенных […]
Есть массив с пустыми элементами (empty): var massiv = [1,,2,,,3,,,,4] Задача Мы хотим узнать длину этого массива без пустых элементов. В чём проблема? У любого массива в JavaScript есть свойство «length«. Мы всегда можем обратиться к этому свойству и узнать длину массива. Давайте так и сделаем: massiv.length В ответ получим […]
Как случайным образом поменять местами элементы массива? (Array shuffle) Возьмём простой массив для тестов: var massiv = [100, 101, 102, 103, 104, 105, 106, 107] Из этого массива мы хотим получить другой массив, чтобы его элементы были перемешаны относительно оригинального массива. Как это сделать? Нам поможет конструктор Math и его […]
Синтаксические и лексические грамматики Контекстно-свободные грамматики «Контекстно-свободная грамматика» (context-free grammar) состоит из ряда «производств» (productions). Каждое производство имеет абстрактный символ, называемый «нетерминальным» (nonterminal), «в левой части» (left-hand side) и последовательность из нуля или более нетерминальных и «терминальных» (terminal) символов в правой части. Для каждой грамматики терминальные символы взяты из определенного […]
Есть строка: var stroka = "Телевизор LG серый (арт. 73466dsd86dfs) диагональ 45" Мы хотим получить последовательность, которая находится внутри круглых скобок вместе со скобками. Как это сделать? Решение Пишем регулярное выражение и у него вызываем метод exec() по нашей строке. Не забываем экранировать круглые скобки. /\(.+\)/.exec(stroka) Нам возвращается массив. Из […]
Есть строка: var stroka = "Телевизор LG серый (арт. 73466dsd86dfs) диагональ 45" Нам нужно удалить часть строки, которая находится внутри круглых скобок вместе со скобками. Как это сделать? Решение Нам поможет регулярное выражение. Мы сейчас его напишем. Определяем регулярное выражение: / / В нашем случае в строке всего две […]
Есть строка: var stroka = "BlaBla(Bla)" Нужно удалить символ круглой скобки при помощи регулярного выражения. В чём тут проблема? Если мы попытаемся применить стандартную дизъюнкцию по символу круглой скобки ( , то получим сообщение об ошибке: var s2 = stroka.replace(/(/,'') Так происходит потому, что символы скобок могут являться частью конструкций […]
Пример № 1 — последовательность одинаковых символов встречается один раз в строке Есть строка: var stroka = "Магазиииииииииин" В этой строке очень часто записана буква «и» — одна следом за другой. Как удалить «лишние» буквы «и» и оставить только одну? Воспользуемся квантификатором «+» и отберём последовательность повторяющихся букв «и» stroka.match(/и+/) […]
Функция сложения всех отрицательных чисел в массиве function sumMinus (arr) { return arr.filter(i=>i<0).map(i=>x+=i,x=0).reverse()[0] } Пример работы функции: var massiv = [-10, -5, -3, -2, 0, 2, 3, 5, 10] sumMinus (massiv) В результате получаем сумму всех отрицательных чисел массива, равную -20. Собственный метод для объектов-прототипов Array Array.prototype.sumMinus = function() { […]
Функция сложения всех положительных чисел в массиве function sumPlus (arr) { return arr.filter(i=>i>0).map(i=>x+=i,x=0).reverse()[0] } Пример работы функции: var massiv = [-5, -3, -2 , 0, 2, 3, 5] sumPlus (massiv) В результате получаем сумму всех положительных чисел массива, равную 10. Собственный метод для объектов-прототипов Array Array.prototype.sumPlus = function() { return […]
«g», «i», «m», «s», «u», «y» «g» — «global» Глобально сопоставить шаблон несколько раз в строке. Определяет, надо ли проверять регулярное выражение на все возможные сопоставления со строкой, или достаточно только первый раз. code unit 0x0067 (LATIN SMALL LETTER G) «i» — «ignoreCase» Определяет, надо ли игнорировать регистр символов […]
Есть массив: var massiv = [1, 2, 3, 4] Мы хотим добавить новый массив [55, 55] внутрь оригинального массива, чтобы сохранились все элементы. Как это сделать? В какое место добавить(вставить) новый массив? Существует всего 3 варианта куда мы можем запихнуть новый массив: В начало В середину В конец Рассмотрим […]
Есть оригинальный массив с массивами внутри: var massiv = [1, 2, [3, 3], [4, 4], 5, 6] Как удалить массивы [3, 3] и [4, 4]? Мы можем отфильтровать элементы оригинального массива и вернуть новый массив, в котором не будет массивов. massiv.filter(i => i.constructor.name != "Array") [1, 2, 5, 6] Результат […]
Регулярные выражения по своей сути являются шаблонами для взаимодействия со строками. В этом разделе мы рассмотрим такое понятие как Утверждение (Assertion). Основное направление сопоставления строк движется слева направо. Assertion[U, N] :: Утверждение 1 — ^ Утверждение 2 — $ Утверждение 3 — \b Утверждение 4 — \B Утверждение 5 — […]
Есть массив из строк: var massiv = [ "белый", "вкусный", "красное", "противное", "фиолетовая", "горькая" ] Мы хотим отобрать из этого массива строки, которые заканчиваются на определённую последовательность символов. Как это сделать? Что будем использовать? Мы будем пользоваться методом filter() для объектов-прототипов Array. Мы будем пользоваться методом exec() для объектов-прототипов RegExp. […]
Красивое решение для массива из чисел massiv.map(i=>x+=i, x=0).reverse()[0] massiv — это тот массив, на котором мы вызываем методы. То есть тот массив, в котором нужно сложить все числа. Мы используем второй аргумент функции map(), чтобы создать переменную «над» функцией обратного вызова (над первым аргументом map()). Коллбек будет видеть нашу переменную […]
В описаниях ниже используются следующие псевдонимы (aliases): Input InputLength NcapturingParens DotAll IgnoreCase Multiline Unicode WordCharacters Input Input — это Список, элементы которого являются символами String, которым соответствует шаблон регулярного выражения. Каждый символ является либо «единицей кода» (code unit), либо «точкой кода» (code point), в зависимости от типа задействованного шаблона. […]
Есть строка: var stroka = "ДелимСловаНаЧасти" Мы хотим разделить слова в этой строке по принципу заглавной буквы. Как это сделать? Способ № 1- при помощи массивов // Делаем из строки массив var massiv = [...stroka] // Добавляем пробелы перед заглавными буквами. Не трогаем первую букву (оставляем как есть). var massiv2 […]
Функция извлекающая числа из строки function numFromStr(str){ return [...str] .map(i => {if(isFinite(i) == true || i == "."){return i}else{return " "}}) .join("") .split(" ") .filter(i => i != "") .map(i => Number(i)) } Принимает строку. Возвращает массив с числами. Пример строки — Скопируй функцию и протестируй в консоли браузера! var […]
Есть массив из строк: var massiv = [ "aabbgghh", "aazzxx", "bbgghhaa", "bbzzxx", "abctt", "bactt" ] Мы хотим отобрать из этого массива строки, которые начинаются на определённую последовательность символов. Как это сделать? Что будем использовать? Мы будем пользоваться методом filter() для объектов-прототипов Array. Мы будем пользоваться методом exec() для объектов-прототипов RegExp. […]
Эта задача отличается от простой похожей — «Как сложить все цифры в строке?» В этой задаче мы попытаемся определить, что является числом в строке, а также как сложить все эти числа. Функция сложения всех чисел из строки function sumNumFromStr(str){ return [...str].map(i=>{if(isFinite(i)==true || i=="."){return i}else{return " "} }).join("").split(" ").filter(i=>i!="").map(i => […]
Условие Нам нужно проверить условие, является ли передаваемый символ строковым представлением цифры. Задача проста, потому что в десятичной системе счисления всего 10 цифр. Но мы не будем городить «ручных» проверок, а доверим решение вопроса самому JavaScript и его встроенному в язык функционалу. У нас есть строки для теста: var s1 […]
Способ № 1 — Функция переворачивания строки через spread, revese и join function reverseStr(str){ return [...str].reverse().join("") } Логика работы функции Есть строка: var stroka = 'tpircSavaJ' Все строки в JavaScript являются итерируемыми объектами, а значит могут быть приведены к массиву. Воспользуемся оператором троеточия. var massiv = [...stroka] Теперь в переменной […]
Как получить все элементы со строковыми значениями из массива? У нас есть массив со смешанными типами данных: var massiv = [ {'ff':'ff'}, 123, [], "stroka1", [456], "stroka3", {'dd':'rr'}, "stroka2", 567, "stroka5", 183, "stroka6", true, false, "stroka4"] Нам нужно вытащить из этого массива только строковые элементы. Как это сделать? Воспользуемся методом […]
Возможны всего 3 варианта, в какое место строки можно ВСТАВИТЬ другую строку: Вставить строку в начало Вставить строку в конец Вставить строку в середину Предлагаю рассмотреть все три варианта вставки строк в строки. Начнём с самого простого Как вставить строку в начало другой строки? Есть две строки: var s1 = […]
Как следует из названия метода concat() (конкатенация) — это сложение нескольких массивов в один, с сохранением очерёдности массивов и их элементов. Сперва выбираем массив на котором будем вызывать метод concat() — массив, чьи элементы будут первыми в новом массиве. Потом через точку пишем concat() и внутрь круглых скобок через запятую […]
Мы хотим сделать функцию, которая будет оповещать пользователя о неправильно переданных данных. То есть пользователь не будет получать из функции никаких данных, вообще. Пускай у нас будет простая функция, которая складывает два числа вместе и возвращает результат сложения. function sumAB(a, b){ return a + b } Как нам сделать так, […]
Как узнать, является ли переменная массивом? У нас есть две переменные (massiv и chtoto): var massiv = [21,20,98,99] и var chtoto = {aaa: 111} Как узнать, является ли переменная массивом? Мы хотим получить логическое значение проверки переменной на массив — true или false. Если переменная является массивом, тогда мы […]
Как узнать какое количество строк находится в массиве? Когда мы говорим о массиве, то мы работаем с элементами и их индексами. В данном случае предполагается, что элементами массива являются строковые значения. То есть по сути нам нужно узнать сколько элементов находится в массиве. Как это сделать? Пусть у нас будет […]
Функция получения глубины уровня вложенности массивов в массиве function glubina(arr){ if(arr.filter(i => i.constructor.name === "Array").length != 0){ return 1 + glubina([].concat(...arr.filter(i => i.constructor.name === "Array"))); } else { return 0; } } Та же функция, оформленная тернарным оператором function glubina(arr){ return x <= arr.filter(i => i.constructor.name === "Array").length != 0 […]
Есть объект: var mashina = { brand: "Jeep", year:2050, model: "Kaffin", color: "Black", maxspeed: 170, } Нам нужно из этого объекта сгенерировать разметку. Как это сделать? Можем написать функцию: function carstr (x) { var h1 = `<h1>Автомобиль ${x.brand} ${x.model} ${x.year} год</h1>`; var brand = `<p>Производитель: ${x.brand}</p>`; var model = `<p>Модель: […]
Этот вопрос можно разделить на два варианта ответа: Мы генерируем строку JavaScript Мы генерируем объекты JavaScript Предлагаю рассмотреть два варианта генерации разметки. Но заранее опишу предназначение обоих вариантов. Первый способ нужен в основном для серверной стороны, когда сайт работает на JavaScript. Я про NodeJS. Сервер генерирует разметку и отправляет строку […]
У нас есть строка: var stroka = "Привет! Как твои дела?" Мы хотим подставлять в нужное место строки свои строковые значения из переменных. Как это сделать? В JavaScript существует 3 способа объявления строк: Через двойные кавычки — " Через одинарные кавычки — ' Через обратные кавычки — ` Когда мы […]
Как в Visual Studio Code превратить одну длинную строку кода в несколько строк кода, чтобы было красивое форматирование? Есть строка кода: var mashina = { brand: "Jeep", year:2050, model: "Kaffin", color: "Black", maxspeed: 170, } Мы хотим красиво раскидать этот JavaScript объект на строчки, чтобы каждое свойство объекта было на […]
Есть объект: var mashina = { brand: "Jeep", year:2050, model: "Kaffin", color: "Black", maxspeed: 170, } Мы хотим получить список из слов brand, year, model, color, maxspeed. Как получить все ключи объекта mashina? Мы будем использовать метод keys() для конструктора Object. Object.keys(mashina) В ответ мы получаем массив с названиями ключей: […]
Синтаксис метода keys() Array.prototype.keys ( ) Логика работы метода keys() Выполняются следующие шаги: 1. Пусть O будет ? ToObject(значение this). 2. Вернуть CreateArrayIterator(O, key). Как работает итератор массивов в случае метода keys()? Есть массив: var massiv = ["efim", "360", ".", "ru"] Мы создаём итератор массива и кладём его в переменную […]
Эту задачу можно понять несколькими смыслами: Мы в принципе хотим понять существует ли массив с квадратными скобками в основном массиве Мы хотим понять, есть ли похожий массив в основном массиве (с теми же элементами и их значениями) В этой публикации мы рассмотрим эти два варианта трактования вопроса. Начнём с простого. […]
В официальной документации очень скупо описан метод constructor для объектов-прототипов класса Array. «Начальное значение Array.prototype.constructor — это %Array%.» По такому описанию сложно понять о чём вообще идёт речь. Попробую для вас изложить более подробно, что это за метод и зачем он нужен. Что такое конструктор в JavaScript? Заранее скажу — […]
У любого объекта в JavaScript есть свойство constructor, которое определяет название класса из которого был создан данный объект. Например: var a = {a:"a"} var b = [b,b] var c = function(){} var d = 12356 var e = "blablabla" Зная объекты, мы всегда можем узнать в каком конструкторе был создан […]
Эту задачу можно понять несколькими смыслами: Мы в принципе хотим понять существует ли объект с фигурными скобками в массиве Мы хотим понять, есть ли похожий объект в массиве (с теми же ключами и значениями) В этой публикации мы рассмотрим эти два варианта трактования вопроса. Начнём с простого. Есть ли какой-то […]
Нужно воспользоваться методом includes() для объектов-прототипов Array. Метод includes() может принимать два параметра. Первым параметром всегда будет искомый элемент. После выполнения возвращает true или false. Например, у нас есть массив: var massiv = [44, 555, 6666, 7] Проверяем наличие в массиве числа 333: massiv.includes(333) --Результат-- false Проверяем наличие в массиве […]
Есть массив: var massiv = [1, 2, 3, 4] Чтобы из этого массива вернуть новый массив без последнего элемента, нужно воспользоваться методом slice() для объектов-прототипов Array. Он принимает всего два аргумента — «индекс начала» и «индекс окончания«+ 1. Если передать индекс начала равный «0», а индекс окончания «-1» то массив […]
Мы хотим «выдёргивать» из массива случайный элемент. Как это сделать? Для решения задачи нужно воспользоваться методом random() конструктора Math. Метод возвращает случайное число от 0 до 1, но не включая 1. То есть 0 может появиться, но 1 никогда не появится. Но мы не сможем адекватно работать с Math.random() в чистом […]
Всё будет зависеть от того, в каком виде будут приходить данные. Нужно понимать структуру данных в массиве, чтобы правильно написать функцию-обработчик. Рассмотрим случай, когда первый элемент массива является заголовками столбцов таблицы, а все остальные элементы являются строками. var massiv = [ ["Фамилия", "Имя", "Отчество"], ["Иванов", "Иван", "Иванович"], ["Петров", "Пётр", "Петрович"], […]
У нас есть строка: var stroka = "Привет" Теперь допишем к ней » мир.» Мы просто ставим знак плюс «+» и строки приклеиваются друг к другу. Эта операция называется — конкатенация. stroka += " мир." --получим-- "Привет мир." Если хотим получить новую строку из старой Чтобы решить такой вариант задачи, […]
Есть массив: var massiv = [1, 2, 3, 4] Чтобы из этого массива вернуть новый массив без первого элемента, нужно воспользоваться методом slice() для объектов-прототипов Array. Он принимает всего два аргумента — «индекс начала» и «индекс окончания«+ 1. Если передать индекс начала равный «1», то массив начнёт собираться со второго […]
Чтобы возвести число в куб в JavaScript, нужно воспользоваться методом pow() у конструктора Math. Первым параметром передаётся число, которое нужно возвести в куб. Вторым параметром передаётся цифра 3, которая обозначает третью степень (куб). Math.pow(0, 3) 0 Math.pow(1, 3) 1 Math.pow(2, 3) 4 Math.pow(3, 3) 9 Math.pow(4, 3) 16 Аналогичным способом […]
Чтобы возвести число в квадрат в JavaScript, нужно воспользоваться методом pow() у конструктора Math. Первым параметром передаётся число, которое нужно возвести в квадрат. Вторым параметром передаётся цифра 2, которая обозначает вторую степень (квадрат). Math.pow(0, 2) 0 Math.pow(1, 2) 1 Math.pow(2, 2) 4 Math.pow(3, 2) 9 Math.pow(4, 2) 16 Аналогичным способом […]
Введение — Что искать? Прежде всего нужно ответить самому себе на вопрос, какой результат нужно считать успешным поиском. Давайте поясню, что я имею ввиду: Поиск в массиве может: Искать значение элемента Искать значения элементов Искать индекс элемента Искать индексы элементов В чём тут разница? № 1 — Искать значение элемента […]
Как узнать, какое число в массиве является максимальным? Задача решается при помощи метода sort() для объектов-прототипов Array. Решение задачи — простой пример У нас есть чистый массив из одного типа данных: var massiv = [777, 45, -12, 73, -800, 0, 56, 2433, -3478, 412] Все значения у элементов массива […]