const handler = () => {
console.log('click');
}
document.addEventListener('click', handler);
document.addEventListener('click', handler);
document.addEventListener('click', handler);
// при клике выведет только 1 сообщение в консоль
$(document).on('click', handler);
$(document).on('click', handler);
$(document).on('click', handler);
// при клике вывалится 3 сообщения
const dirname = (str) => {
const pos = str.lastIndexOf('/');
if (-1 === pos) return str;
return str.substring(0, pos);
}
dirname('/siparis/kampanyalar/tumu/cok-karisik-orta-firsati')
// /siparis/kampanyalar/tumu
@
— это Оператор управления ошибками: если он предшествует какому-либо выражению в PHP-коде, любые сообщения об ошибках, генерируемые этим выражением, будут подавлены. const [data1, data2, data3] = await Promise.all(
['/test1', '/test2', '/test3']
.map((url) => http.get(url).then(({ data }) => data))
)
.then((values) => {
console.log('values', values);
return values;
});
const [data1, data2, data3] = await Promise.all(
['/test1', '/test2', '/test3']
.map((url) => http.get(url))
)
.then((values) => values.map(({ data }) => data));
var array = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
array
// из каждого сделать функцию, возвращающую промис
.map((el) => () => new Promise((resolve, reject) => $.ajax({
url: '/assets/themes/theme/send.php',
method: 'post',
data: {text: el},
success: resolve,
error: reject,
})))
// склеить цепочку
.reduce((acc, c) => acc.then(() => c()), Promise.resolve())
.catch(err => console.error(err));
const messages = {
'ru': 'Ваше сообщение успешно отправлено!',
'ua': 'Ваше повідомлення успішно відправлено!',
'en': 'Your message has been successfully sent!',
'cn': '您的留言已成功发送!',
}
const path = window.location.pathname; // чтобы не совпало с ya.ru/zz/search?q=/ru/
const defaultLanguage = 'en';
const language = Object.keys(messages)
.reduce((acc, c) => path.includes(`/${c}/`) ? c : acc, defaultLanguage);
const text = messages[language];
let digits = "85172"; // в кавычках, значит это строка
let product = 1; // произведение
// у строки есть свойство длины: length
// к букве в строке можно обращаться по номеру её положения
// буква – тоже строка, надо её перевести в число через Number()
for (let i = 0; i < digits.length; i++) {
const digit = Number(digits[i]); // цифра
product = product * digit;
}
// умножили. Теперь можно вывести:
console.log(product); // 560
function getIndex(adr) {
// ...
return fetch(ajaxurl, {
method: 'POST',
body: formData
}).then(resp => resp.text())
.then(showResult)
// парашютики не забываем:
.catch(err => console.error(err));
}
function showResult(data) {
console.log(data);
}
getIndex('https://ya.ru/'); // вернёт промис, ну и фиг с ним
function getIndex(adr) {
// ...
return fetch(ajaxurl, {
method: 'POST',
body: formData
}).then(resp => resp.text())
.then(showResult)
.catch(err => console.error(err));
}
getIndex('https://ya.ru/')
.then(data => {
document.querySelector('#output').innerText = data;
})
.catch(err => console.error(err));
[2, -1, 2, 3, -9] = 6
(у вас получается 5)[-2, -1, 1, 2] = 3
(у вас выводит 2)function getMaxSubSum(arr) {
let max = 0;
const length = arr.length;
for (let frame = length; frame > 0; frame--) {
let sum = 0;
for (let i = 0; i < frame; i++) sum += arr[i];
max = Math.max(max, sum);
// move frame
for (let offset = 1; offset <= length - frame; offset++) {
sum -= arr[offset - 1];
sum += arr[offset + frame - 1];
max = Math.max(max, sum);
}
}
return max;
}
const tests = () => {
[
[[-1, 2, 3, -9], 5],
[[2, -1, 2, 3, -9], 6],
[[-1, 2, 3, -9, 11], 11],
[[-2, -1, 1, 2], 3],
[[100, -9, 2, -3, 5], 100],
[[1, 2, 3], 6],
[[-1, -2, -3], 0],
].forEach((el, i) => {
const result = getMaxSubSum(el[0]);
console.assert(result === el[1], "Test %d failed: [%s] %d != %d", i, el[0], result, el[1]);
})
}
tests();
HABR_ROOT
HABR_WWW
HABR_KERNEL
app_path()
base_path()
config_path()
database_path()
public_path()
storage_path()
Причём, в них можно передавать параметром относительный путь внутри, чтобы получить полный. Здесь общий не префикс, а постфикс, т.к. результат больше похож на натуральный язык и, видимо, легче запоминается. ++i
и i++
только в том, чему равно само это выражение:let i = 0;
alert(++i); // 1 – прибавили 1 и вернули результат
let j = 0;
alert(j++); // 0 – вернём значение до, и прибавим 1
// после уже всё одинаково
console.log(i, j); // 1, 1
const results = [];
const promises = [];
for (let i = 0; i < 10; i++) {
promises.push(
fetch('/user', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({user: i}),
})
.then(response => response.json())
.then(data => results.push(data))
.catch(err => console.error(err))
);
}
Promise.all(promises)
.then(() => console.log("All 10 done!", results));
server.php
из примера – он и HTTP сервер, который отдаст веб-страницу с нужным JS, и WebSocket сервер. ax + by + cz + d = 0
x, z
искомой точки — получите её y