function split(sum, ...results) {
// делим число на общее количество часов
const part = sum / results.reduce((a, b) => a + b);
// каждые часы умножаем на результат деления и округляем
const result = results.map(hours => Math.round(hours * part));
// финальная сумма с учётом округлений
const resultSum = result.reduce((a, b) => a + b);
// разница между финальной суммой и изначальной
const difference = sum - resultSum;
// если есть разница
if(difference) {
// выбираем рандомно счасливчика\неудачника
// за счёт которого компенсируем разницу
// поменяй если надо выбрать кого-то конкретного :)
const luckyIndex = Math.floor(Math.random() * result.length);
result[luckyIndex] += difference;
}
return result;
}
import { DocumentRenderer } from '@keystone-next/document-renderer';
const renderers = {
inline: {
bold: ({ children }) => {
return <strong>{children}</strong>;
},
},
block: {
paragraph: ({ children, textAlign }) => {
return <p style={{ textAlign }}>{children}</p>;
},
},
};
<DocumentRenderer document={document} renderers={renderers} />;
/\s/
./\(текст\)/
./тут\s+длинная\s+строка.\s+слова\s+разделены\s+пробелами/g
:function spacify(regexp) {
const { source, flags } = regexp;
return new RegExp( source.replace(/\s+([*+{?])?/g, (_, mod) => `\\s${mod ?? '+'}`), flags )
}
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
function toSpacedRegExp(string, flags = 'g') {
return new RegExp( escapeRegExp(string).replace(/\s+/g, '\\s+'), flags )
}
// /тут\s+длинная\s+строка\.\s+слова\s+разделены\s+пробелами/g
const text = toSpacedRegExp('тут длинная строка. слова разделены пробелами')
В моем понимании стрелочная функция берет контекст при объявлении
class Car{
constructor() {
this.name = "BMW"
}
showname = () => {
console.log(this.name);
}
}
let { showname } = new Car();
let obj = {
name: 'random',
showname
}
obj.showname() // всё равно BMW
class Car {
storedThis = this
}
const car = new Car();
const { storedThis } = car;
car === storedThis; // true