const round = (num, pow) => {
const m = 10 ** pow; // Math.pow(10, pow);
return Math.round(Math.floor(num) / m) * m;;
}
default
- Find All Refferences
или что-то похожее. Возможно зависит от установленных расширений. Но export default вряд ли найдет, так как идет поиск по имени, а тут имени не предусмотрено. function range(array: number[]): string {
return array.sort(
(a, b) => a - b
).reduce((acc, next, i) => {
const prev = array[i - 1];
if (prev !== undefined && next - prev === 1) {
acc[acc.length - 1][1] = next;
}
else {
acc.push([next]);
}
return acc;
}, []).map(
arr => arr.join("-")
).join(", ");
}
console.log(range([1, 4, 5, 2, 3, 9, 8, 11, 0])); // 0-5, 8-9, 11
console.log(range([1, 4, 3, 2])); // 1-4
console.log(range([1, 4])); // 1, 4
console.log(range([1])); // 1
console.log(range([])); // ""
div
блоке такого-же размера как и параметры картинки. Скачать будет нельзя. Останется только как-то спрятать данные картинки, или передавать напрямую image data
с сервера. 100% ничего не спрятать, но шанс того, что такую штуку будут разгребать довольно мал.function parseUrl(url) {
const parser = document.createElement("a");
parser.href = url;
let props = {};
parser.search.replace(/^\?/, '').split('&').forEach(item => {
const [prop, value] = item.split("=");
props[prop] = value;
});
return props;
}
function parseUrl(url) {
const parser = new URL(url);
let props = {};
parser.search.replace(/^\?/, '').split('&').forEach(item => {
const [prop, value] = item.split("=");
props[prop] = value;
});
return props;
}
// функция, которая вернет функцию, которая будет на основе указанных вероятностей вызывать одну из указанных функций
const randomFuncBuilder = items => {
const total = items.reduce((sum, item) => sum + item.rate, 0);
return () => {
const rand = Math.random() * total;
let sum = 0;
for(const {func, rate} of items) {
sum += rate;
if (sum >= rand) {
return func();
}
}
};
};
// список функций и некоторого абстрактного значения частоты вызова
// в данном случае диапазон не 0-100, а 0-150.
const funcArray = [
{
func: () => 1,
rate: 10
},
{
func: () => 2,
rate: 20
},
{
func: () => 3,
rate: 30
},
{
func: () => 4,
rate: 40
},
{
func: () => 5,
rate: 50
}
];
// сама готовая функция, которую надо вызывать
const randomFunc = randomFuncBuilder(funcArray);
// результаты будут тут
let res = [];
for(let i = 0; i < 100000; i++) {
res.push(randomFunc());
}
// подсчет результатов, соответствует числу вызовов функций
const count = res.reduce((acc, v) => {
acc[v] += 1;
return acc;
}, {
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
});
// проверка результатов, считать вероятности умеет же? значит вопросов не возникнет.
const total = funcArray.reduce((sum, item) => sum + item.rate, 0);
console.log(count);
console.log({
"1": count[1] / 100000 * total,
"2": count[2] / 100000 * total,
"3": count[3] / 100000 * total,
"4": count[4] / 100000 * total,
"5": count[5] / 100000 * total,
});
Object.defineProperty(String.prototype, "reverse", {
get: function() {
return this.split("").reverse().join("");
}
});
reverse
объявить методом, а не свойством. Иначе неоднозначно все выглядит.// Сразу видно, что это метод, который расширяет класс String и что-то там делает.
String.prototype.reverse = function() {
return this.split("").reverse().join("");
};
const walk = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
let node = null;
while(node = walk.nextNode()) {
if (node.textContent.search("text to search") >= 0 && node.parentNode) {
node.parentNode.remove();
}
}
ctx.beginPath();
ctx.moveTo(1, 150);
ctx.lineTo(100, 130);
ctx.lineTo(100, 230);
ctx.closePath();
ctx.stroke();
ctx.fillStyle = 'red';
ctx.fill();