function variants(a, r) {
return [...Array(2**a.length)].map((x,i)=>a.filter((x,j)=>i&1<<j).sort()).filter((x,i)=>eval(x.join`+`)==r);
}
// Пример использования
console.log(variants([7, 8, 3, 4, 5, 6, 1, 2], 8)) // [[8],[3,5],[1,7],[1,3,4],[2,6],[1,2,5]]
username()
поменяйте с 'email' на 'login'.username()
в трейте (который я указал в начале).public function scopePayedOrders(Builder $builder):Builder{
return $builder->whereRaw('(select sum(incomes.sum) from incomes where incomes.order_id = orders.id) > (select sum(products.sum) from products where incomes.order_id = orders.id)');
}
$items = Orders::payedOrders()->get();
// Выносим за пределы функции, чтобы иметь доступ из любой функции
let timeForQuestion;
function timer() {
const checkTimer = document.querySelector("#checkTimer");
function restOfTime() {
if (Number(checkTimer.innerHTML == 0)) {
checkTimer.parentElement.innerHTML = `<span style="color: #a8323e">Время закончилось</span>`
clearTimeout(timeForQuestion)
resultFalse(state);
} else {
checkTimer.innerHTML = checkTimer.innerHTML - 1;
}
}
timeForQuestion = setInterval(restOfTime, 1000)
}
function resultFalse(elem) {
clearInterval(timeForQuestion); // останавливаем интервал
const falseAnswerCount = document.querySelector("#falseAnswerCount");
falseAnswerCount.innerHTML = Number(falseAnswerCount.innerHTML) + 1;
questionWindow.innerHTML = `<span style="color: #C30052">Ты совершил ошибку</span> <br> ${elem.currentAnswer.currentAnswerQuestion}`;
createQuestionBtn.innerHTML = "Учту. Создать новый вопрос";
fullDisableElem(answerButton);
fullEnable(createQuestionBtn);
changeInput("false");
}
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location, onComplete, onAbort) {
const result = originalPush.call(
this,
location,
onComplete,
onAbort
);
if (result) {
return result.catch(err => {
if (err.name !== 'NavigationDuplicated') {
throw err;
}
});
}
return result;
};
const originalReplace = VueRouter.prototype.replace;
VueRouter.prototype.replace = function replace(location, onComplete, onAbort) {
const result = originalReplace.call(
this,
location,
onComplete,
onAbort
);
if (result) {
return result.catch(err => {
if (err.name !== 'NavigationDuplicated') {
throw err;
}
});
}
return result;
};
const secondsTill = timeString => {
const [hours, minutes] = timeString.split(':');
const now = new Date();
const end = new Date();
end.setHours(hours);
end.setMinutes(minutes);
end.setSeconds(0);
return Math.floor((end - now) / 1000);
}
const endOfClass = '11:20';
alert(`До конца урока в ${endOfClass} осталось ${secondsTill(endOfClass)} секунд`);
["3:5", "4:2", "8:7"]
.reduce()
, имеет 2 обязательных параметра (accumulator, currentValue) и 2 необязательных (index, array)..reduce((a, [x, _, y])
в качестве второго параметра (currentValue) выступает [x, _, y]
..reduce()
к массиву, который я представил в самом начале ответа, в качестве currentValue
будут выступать следующие значения:"3:5"
"4:2"
"8:7"
// используется 1 элемент массива //
let x, _, y;
[x, _, y] = "3:5";
/* x === "3", _ === ":", y === "5" */
// используется 2 элемент массива //
let x, _, y;
[x, _, y] = "4:2";
/* x === "4", _ === ":", y === "2" */
// используется 3 элемент массива //
let x, _, y;
[x, _, y] = "8:7";
/* x === "8", _ === ":", y === "7" */
_
на любое другое валидное название переменной, чтобы убедиться, что оно не используется.let x, y;
[x, ,y] = "5:3";
/* x === "5", y === "3" */
a
, а что за b
?» не самый удачный: в примере аргументы игнорируются.<?php
$request = curl_init('http://www.example.com/upload.php');
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,
CURLOPT_SAFE_UPLOAD, true); curl_setopt(
$request,
CURLOPT_POSTFIELDS,
[
'blob[0]' => new CURLFile(realpath('first-file.jpg'), 'image/jpeg'),
'blob[1]' => new CURLFile(realpath('second-file.txt'), 'text/plain'),
'blob[2]' => new CURLFile(realpath('third-file.exe'), 'application/octet-stream'),
] );
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($request);
function waitForElementAndClick(selectors, checkInterval = 100) {
return new Promise((resolve) => {
let intervalId = setInterval(() => {
if (document.querySelector(selectors) != null) {
document.querySelector(selectors).click()
clearInterval(intervalId)
resolve()
}
}, checkInterval)
});
}
// Возвращается dom node - прям этот элемент из DOM
document.querySelector('Ваш элемент')
// Вы прям на эту ноду вешаете событие
document.querySelector('Ваш элемент').addEventListener('click',f())
// Возвращается "Масив" элементов - тип масив
document.querySelectorAll('Ваш элемент')
// У массива нет метода addEventListener - ошибка
document.querySelectorAll('Ваш элемент').addEventListener('click',f())
document.querySelectorAll('Ваш элемент').forEach(item=>{
// Item - каждый элемент в массиве и он же является node елементом из DOM
item.addEventListener('click',f())
})