Заметки по javascript (nodejs)

Разберем задачи для самопроверки по javascript, которые будем запускать на платформе Node.js установленной на нашем ПК в роли сервера.

Предварительные действия:

1Node.js - это платформа на которой можно выполнять запросы javascript, необходимо установить LTS версию программы, доступную по ссылке https://nodejs.org/en/download/

После скачивания, запустить установочный файл и пройти по шагам, нажимая на "Next" -> "Next" -> "Finish".


2Исходный код javascript будем запускать из "блокнота", сохраненного в расширении *.js. Будет более удобно использовать программу Notepad++, доступную по ссылке https://notepad-plus-plus.org/downloads/

Установка так же простая: "Далее" -> "Далее" до финиша.


3В некоторых заданиях нужно выполнить выборку из таблиц. Node.js может взаимодействовать с базами данных, например с mysql. Для этого установим mysql, доступный по ссылке https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.12.0.msi

Установка через "Next" -> "Next", чекбоксы все оставляем по-умолчанию и проходим до финиша установки.


Задание №1

Дано 2 числа Х и У. Как разложить в ряд число Х с количеством элементов У, чтобы они были размещены равномерно.

При Х = 8, У = 3.

При Х = 7, У = 3.

При Х = 13, У = 4.

Решение задания №1

В блокноте создать файл с именем summands.js со следующим кодом:

// summands.js:
function closest_summands(x, y) {
    var div = x / y,
        rem = x % y,
        res = [];
    for (var i=0; i<rem; i++)
        res.push( Math.ceil(div) );
    for (       ; i<y;   i++) // continue
        res.push( Math.floor(div) );
    return res;
}
x = 13; // задать значение x
y = 4; // задать значение y
console.log(closest_summands(x,y)); // вывести в консоль ряд

Для x, y присваиваем значения из задания. Получаем результат в консоли Командной строки Windows (cmd). Через команду cd перейти в папку с сохраненным файлом summands.js и запустить его через команду node:

2021-05-19 121359

При x=13, y=4 ряд равен 4+3+3+3, т.е. сумма (x)=13 разложилась на количество элементов (y)=4 равномерно по значениям в порядке убывания значения элемента до тех пор, пока хватает суммы 13 для равномерного разложения на слагаемые. Равномерное - здесь ключевое слово, программа раскладывает так, чтобы было задействовано как можно меньше чисел слагаемых, чтобы было более равномерное разложение. Если рассматривать ряд = [ 4, 4, 3, 2 ] (в котором сумма тоже равна 13), то он уступает ряду [ 4, 3, 3, 3 ] по равномерности, т.к. задействовано три разных значения (4,3,2), а в результате ряда [ 4, 3, 3, 3 ] условие выполняется более равномерно, т.к. задействовано два числа (4,3).

  • При Х = 8, У = 3. Ряд имеет вид -> [ 3, 3, 2 ];
  • При Х = 7, У = 3. Ряд имеет вид -> [ 3, 2, 2 ].
Задание №2

Ниже ситуация отражающая периоды действия цен на товар в виде случайно пересекающихся периодов. Актуальной считается цена с более поздней датой создания.

Цена Дата "с" Дата "по" Дата создания
100 01.01.2018 15.05.2018 31.12.2017
150 10.01.2018 15.01.2018 07.01.2018
120 01.02.2018 01.03.2018 10.01.2018
110 16.05.2018 01.06.2018 10.05.2018
130 28.08.2018 01.07.2018 01.06.2018

Напишите алгоритм по избавлению данных от пересечений. Каков будет его результат? Написать решение на javascript (nodejs).

Решение задания №2

Необходимо создать таблицу в mysql как описано в моей статье.

В блокноте создать файл с именем maxdata.js со следующим кодом:

// maxdata.js:
const mysql = require("mysql2");
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "sorso",
  password: "123456",
  timezone : "+00:00"
});
const sql = 'SELECT cena, data_sozdanyia FROM price t JOIN (SELECT MAX(data_sozdanyia) max FROM price) m ON m.max = t.data_sozdanyia;'; 
connection.query(sql, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});
connection.end();

Согласно коду, мы подключаемся к базе mysql используя данные авторизации и названия базы. Далее будет выполняться sql запрос последней даты из таблицы "price".

Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node:

2021-05-19 131807

Как результат мы получили цену соответствующую последней "Дата создания" после выборки из таблицы mysql.

Задание №3

Написать результат всех возможных объединений двух таблиц.

Таблица 1  Таблица 2
 1  1
 1  1
 2  2
null 2
4 2
null
null
3

Решение задания №3

Необходимо создать таблицу в mysql как описано в моей статье. При заполнении значения null в таблице через команду INSERT INTO пишем 'null'.

В блокноте создать файл с именем innerjoin.js со следующим кодом:

// innerjoin.js:
const mysql = require("mysql2");
const connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  database: "sorso",
  password: "123456",
  timezone : "+00:00"
});
const sql = 'SELECT * FROM table1 INNER JOIN table2 ON table1.number1 = table2.number2'; 
connection.query(sql, function(err, results) {
    if(err) console.log(err);
    console.log(results);
});
connection.end();

Согласно коду, мы подключаемся к базе mysql используя данные авторизации и названия базы. Далее будет выполняться sql запрос слияния 2-х таблиц через INNER JOIN.

Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node:

2021-05-19 133759

Т.е. можно сказать, что получили таблицу после слияния:

+---------+---------+

| number1 | number2 |

+---------+---------+

|       1 |       1 |

|       1 |       1 |

|       1 |       1 |

|       1 |       1 |

|       2 |       2 |

|       2 |       2 |

|       2 |       2 |

+---------+---------+

Задание №4

Палиндром — слово, предложение или последовательность символов, которая абсолютно одинаково читается как в привычном направлении, так и в обратном. К примеру, “Anna” — это палиндром, а “table” и “John” — нет.

Постановка:

Дана строка; нужно написать функцию, которая позволяет вернуть значение true, если строка является палиндромом, и false — если нет. При этом нужно учитывать пробелы и знаки препинания.

Решение задания №4

Следует заметить, что согласно заданию паллиндром должен проверяться без учета регистра (заглавные или прописные буквы). В блокноте создать файл с именем palindrome.js: со следующим кодом:

  // palindrome.js:
  function isPalindrome(str) {
str = str.toLowerCase() // преобразование в нижний регистр
    var strLen = str.length,
        strReverse = str.split('').reverse().join(''); //Разбиваем строку посимвольно  и превращаем ее в массив с помощью split(''), потом применяем к нему метод reverse() и собираем все символы в строку с помощью join('')
    if (strReverse == str) {
      return 'is palindrome';
    } else {
      return 'is not palindrome';
    }
  }
  test = isPalindrome('Anna'); // тестовые палиндромы
  test2 = isPalindrome('John');
  test3 = isPalindrome('table');
  console.log('Anna',test); // вывод результата истинности палиндрома
  console.log('John',test2);
  console.log('table',test3);

Проверяем результат запроса в консоли Командной строки Windows (cmd) через команду node:

2021-05-19 135040

mr. Mak

Остались вопросы? Пишите на почту admin@hzit.ru

Администратор сайта hzit.ru
Back to top