<Message
key={text}
text={ text }
/>
const text = 'определённый текст';
const link = document.querySelector(`a[href*="${text}"]`);
if (link) {
link.click();
}
users.push(this.user);
let lastUser = users[users.length - 1];
оптимистичной блокировкойНет. Нужна пессимистическая.
Пессимистическая блокировка схожа с принципом Мерфи. Она предполагает, что если что-то плохое может случится, это обязательно случится. В отличии от пессимистической, оптимистическая блокировка предполагает что во время обновления записи в БД мы будем единственными кто ее меняет. В большинстве случаев, так и есть, так что оптимизм оправдан. Тем не менее, во время UPDATE’а мы проверяем наверняка изменилась ли запись с момента ее чтения. И если изменилась, то мы обязаны прочитать последнюю версию записи из БД и повторить нашу операцию с ней.
Дали 3 дня и после можно скинуть даже не полностью готовое.В этом вся соль. Делаете что умеете, а после пытаетесь сделать все остальное. От этого, видимо, будет зависеть ваша ЗП. Вам же не сказали, что нужно заверстать весь макет + анимация + API карты, иначе вы бездарь. Они дали типичный макет для их студии и хотят по максимуму проверить ваши навыки, понять что вы умеете. Но и вправду, не сильно понятно, зачем столько страниц верстать, можно было одну + карта.
Примечание: в команде SELECT каждое выражение оценивается только при отправлении клиенту. Это означает, что в условиях HAVING, GROUP BY, or ORDER BY не следует ссылаться на выражение, содержащее переменные, которые введены в части SELECT этой команды.
<?php
class Hook
{
private $mysqli;
public function MySQLi()
{
$this->mysqli = new \mysqli('127.0.0.1', 'root', '', 'products'); # Подключение к бд
if ($this->connect_error) {
die('Ошибка подключения ('.$mysqli->connect_errno.') '.$mysqli->connect_error);
}
}
public function MySQLiQuery()
{
$tables = array(
'hook_on_the_grid',
'hook_perforation',
'hook_on_chipboard',
'hook_on_the_economy_panel',
'hook_systems',
'trade accessories'
);
$count_tables = count($tables);
$queries = [];
# Перебирает массив $tables и создает новый с готовыми запросами
for ($i=0; $i < $count_tables; $i++) {
foreach ($tables as $value) {
$queries[] = "SELECT * FROM `$value`";
}
}
return $queries;
}
public function MySQLiResult()
{
# Устанавливает кодировку для выходных данных бд
$this->mysqli->query("SET NAMES utf8");
$query = $this->MySQLiQuery();
$count_query = count($query);
foreach ($query as $value) { # Перебор массива и отправка запросов
$result[] = $this->mysqli->query($mysqli, $value);
}
foreach ($result as $value) { # Перебирает первые элементы из каждой категории
$count_nums[] = $value->num_rows($value);
}
foreach ($result as $value) {
$rows[] = $value->fetch_assoc($value); # ПЕРЕДЕЛАТЬ В ООП
for ($i=0; $i < $count_nums[0]; $i++) {
$rows[] = $value->fetch_assoc($value); # Перебирает и сохраняет все данные из бд # ПЕРЕДЕЛАТЬ В ООП
}
$rows = array_filter($rows, function($element) { #Остортировывает пустые элементы в массиве
return !empty($element);
});
}
return $rows;
}
}
$hook = new Hook;
const object = {};
const newArray = []
arr1.forEach(item => object[item.id] = item) // перегоняем первый массив в объект, где ключи объекта id элемента
arr2.forEach(item => {
const objectItem = object[item.id];
if (objectItem !== undefined) {
const mergeItem = Object.assign({}, objectItem, item);
newArray.push(mergeItem);
object[item.id] = undefined;
}
})
Это будет быстрее чем вложенный цикл по второму массиву.
((\d{4}\-\d{2}\-\d{2}))(\n|.)*?(?=(\d{4}\-\d{2}\-\d{2}))
const inputs = document.querySelectorAll('ol input');
const classes = [...new Set(Array.prototype.flatMap.call(
inputs,
n => [...n.classList]
))];
const classes = Array
.from(inputs, n => Array.from(n.classList))
.flat();
// или
const classes = [].concat.apply(
[],
[].map.call(inputs, n => n.className.split(' '))
);
// или
const classes = [];
for (const n of inputs) {
for (const m of n.classList) {
classes.push(m);
}
}
// или
const classes = [];
for (let i = 0; i < inputs.length; i++) {
for (let j = 0; j < inputs[i].classList.length; j++) {
classes[classes.length] = inputs[i].classList[j];
}
}
// или
const getClasses = (classList, i, n = classList.item(i)) =>
n ? [ n, ...getClasses(classList, -~i) ] : [];
const classes = (function get(i, n = inputs.item(i)) {
return n ? [ ...getClasses(n.classList, 0), ...get(++i) ] : [];
})(0);