<template>
— из него можно забирать готовый DocumentFragment, который клонировать и наполнять данными.// Demonstrate selected international locales
var locales = [
undefined, // Your own browser
'en-US', // United States
'de-DE', // Germany
'ru-RU', // Russia
'hi-IN', // India
'de-CH', // Switzerland
];
var n = 100000;
var opts = { minimumFractionDigits: 2 };
for (var i = 0; i < locales.length; i++) {
console.log(locales[i], n.toLocaleString(locales[i], opts));
}
undefined '100 000,00'
en-US 100,000.00
de-DE 100.000,00
ru-RU 100 000,00
hi-IN 1,00,000.00
de-CH 100’000.00
const number = 123456.789;
new Intl.NumberFormat('ru-RU').format(number);
// "123 456,789"
по умолчанию { style: 'decimal' }
new Intl.NumberFormat('ru-RU', { minimumFractionDigits: 6 })
.format(123456.789012345);
// "123 456,789012" - после запятой не разделяет
document.querySelector('.form').addEventListener('input', e => {
const data = Array.from(
e.currentTarget.children,
n => Array.from(n.querySelectorAll('input'), m => m.value)
);
document.querySelector('.total').innerText = Array
.from(document.querySelectorAll('.row'))
.reduce((acc, n, i) => {
data[i].forEach((m, j) => n.children[j + 1].innerText = m);
return acc + (+data[i].at(-1) || 0);
}, 0);
});
const total = document.querySelector('.total');
const form = document.querySelector('.form');
const formRows = form.getElementsByClassName('d-flex');
const tableRows = document.getElementsByClassName('row');
form.addEventListener('input', ({ target: t }) => {
const inputBox = t.closest('.input-box');
const formRow = inputBox.parentNode;
const iRow = Array.prototype.indexOf.call(formRows, formRow);
const iCol = -~Array.prototype.indexOf.call(formRow.children, inputBox);
tableRows[iRow].cells[iCol].textContent = t.value;
if (iCol === formRow.children.length) {
total.textContent = Array.prototype.reduce.call(
formRows,
(acc, n) => acc + (n.lastElementChild.children[0].value | 0),
0
);
}
});
<span aria-hidden="true" class="line-numbers-rows"><span></span>
<span>
.<span>
который стилями сделает текст внутри него красным:[о-т]
для поиска всех букв из диапазона: о, п, р, с, т. ('<test>').replace(['<', '>'], ''); // "<test>"
content = content.replace(/[<>]/g, '');
/ /
, которое заменяет "глобально" (флаг g
) во всей строке[ ]
, на пустую строку ''
.script
? Это может быть небезопасно.querySelectorAll('script')
и затем уцелевшее дерево вставить в элемент для предпросмотра.PDOStatement::fetchAll() возвращает массив, содержащий все оставшиеся строки результирующего набора. Массив представляет каждую строку либо в виде массива значений одного столбца, либо в виде объекта, имена свойств которого совпадают с именами столбцов.https://www.php.net/manual/ru/pdostatement.fetchall.php
const index = Math.floor(Date.now() / (3 * 864e5)) % 3; // 0, 1 или 2
console.log( ['X', 'Y', 'Z'][index] );
Первая тройка – получить число миллисекунд в трёх сутках. 3 * 60 * 60 * 24 * 1000 = 3 * 86400000 = 3 * 864e5
for (let i = 0; i < 6; i++) {
console.log( i % 3 );
}
// 0 1 2 0 1 2
const getFromTree = (tree, childrenKey, getter = n => n) =>
Array.isArray(tree)
? tree.flatMap(n => [
getter(n),
...getFromTree(n[childrenKey], childrenKey, getter),
])
: [];
// или
function* flatTree(tree, childrenKey) {
if (
tree instanceof Object &&
tree[Symbol.iterator] instanceof Function
) {
for (const n of tree) {
yield n;
yield* getFromTree(n[childrenKey], childrenKey);
}
}
}
const getFromTree = function(tree, childrenKey, getter = n => n) {
const result = [];
for (const stack = this(tree); stack.length;) {
const n = stack.pop();
result.push(getter(n));
stack.push(...this(n[childrenKey]));
}
return result;
}.bind(x => x instanceof Array ? [...x].reverse() : []);
// или
const flatTree = function*(tree, childrenKey) {
const stack = [];
for (let [ i, arr ] = this(tree); ++i < arr.length || stack.length;) {
if (i === arr.length) {
[ i, arr ] = stack.pop();
} else {
yield arr[i];
stack.push([ i, arr ]);
[ i, arr ] = this(arr[i][childrenKey]);
}
}
}.bind(x => [ -1, x?.constructor === Array ? x : [] ]);
// если использовать обычную функцию
const result = getFromTree(tree, 'children', ({ children, ...n }) => n);
// или, генератор
const result = Array.from(flatTree(tree, 'children'), ({ children, ...n }) => n);
const obj = new Proxy({}, {
get(target, key) {
const lowerKey = key.toLowerCase();
return target[Object.hasOwn(target, lowerKey) ? lowerKey : key];
},
set(target, key, val) {
target[key.toLowerCase()] = val;
return true;
},
has(target, key) {
return key in target || key.toLowerCase() in target;
},
defineProperty(target, key, descriptor) {
return Object.defineProperty(target, key.toLowerCase(), descriptor);
},
deleteProperty(target, key) {
return delete target[key.toLowerCase()];
},
getOwnPropertyDescriptor(target, key) {
return Object.getOwnPropertyDescriptor(target, key.toLowerCase());
},
});
Каким образом движок написанный на C++ понимает другие языки?