letterElement.startsWith('A')
'Andrew'.startsWith('A') // true
'Dmitriy'.startsWith('A') // false
const arrBig = [
{ _id: 1, one: 7, two: 5 },
{ _id: 2, one: 6, two: 3 },
{ _id: 3, one: 4, two: 7 },
{ _id: 4, one: 15, two: 2 },
];
const arrSmall = [{ _id: 1, next: 22, gen: 54 }, { _id: 3, next: 6, gen: 3 }];
const key = '_id';
const dictSmall = arrSmall.reduce((acc, c) => {
acc[c[key]] = c;
return acc;
}, {});
const template = { next: 0, gen: 0 };
const addKeys = Object.keys(template);
const result = arrBig.map(item => {
const nuItem = { ...item, ...template };
const addendum = dictSmall[item[key]];
if (addendum) {
addKeys.forEach(key => (nuItem[key] = addendum[key]));
}
return nuItem;
});
/* [
{"_id":1,"one":7,"two":5,"next":22,"gen":54},
{"_id":2,"one":6,"two":3,"next":0,"gen":0},
{"_id":3,"one":4,"two":7,"next":6,"gen":3},
{"_id":4,"one":15,"two":2,"next":0,"gen":0}
] */
const N = 3;
const delay = ms => new Promise(res => setTimeout(res, ms));
const next = () => {
if (items.length > 0) {
return download(items.shift())
.then(delay(500 + Math.floor(Math.random() * 500))) // случайная пауза между закачками
.then(next);
}
};
const works = Array.from({ length: N }, () =>
Promise.resolve()
.then(next)
.catch(console.error)
);
Promise.all(works).then(() => console.log('All Done'));
[1, 2, 1000, 1001,...]
далее все 100500 элементов больше 1000. const sumTwoSmallestNumbers = arr => {
let a = arr[0];
let b = arr[1];
if (a > b) {
[a, b] = [b, a];
}
for (let i = 2; i < arr.length; i++) {
const v = arr[i];
if (v < a) {
b = a;
a = v;
} else if (v < b) {
b = v;
}
}
return a + b;
};
sumTwoSmallestNumbers([55, 44, 1, 99, 2]); // 3
.hidden { display: none; }
document.querySelectorAll('li')
.forEach(li => li.classList.toggle('hidden', !li.querySelector('span')));
для каждого элемента списка устанавливает или снимает класс hidden
, в зависимости от того, найдётся ли span
где-нибудь внутри этого элемента. const tensor = tf.squeeze(result);
const canvas = document.createElement('canvas');
canvas.width = tensor.shape.width
canvas.height = tensor.shape.height
await tf.browser.toPixels(tensor, canvas);
const cat2 = document.createElement('img');
cat2.src = canvas.toDataURL();
Math.sqrt(N)
// дизель* генератор
const ltSqr = function*(n) {
const limit = Math.min(100, Math.sqrt(n));
let i = 1;
while (i <= limit) {
yield i++;
}
}
// использование
let N = 42;
for (const x of ltSqr(N)) {
console.log(x);
}
// выведет натуральные от 1 до 6
https://cdn.jsdelivr.net/npm/sweetalert2@11.4.8
DISCLAIMER
Реализации сортировки могут быть разными.{ // выполнить в консоли браузера
const oneTest = () => {
let iterations = 0;
[1, 2, 3].sort((a, b) => {
const result = Math.random() > Math.random() ? 1 : -1;
console.log(`${iterations}: ${a} vs ${b} = ${result}`);
iterations++;
return result;
});
return iterations;
}
console.clear();
const totalTests = 10;
const stats = {};
for (let test = 0; test < totalTests; test++) {
console.group(`Test ${test + 1} of ${totalTests}`);
const iterations = oneTest();
stats[iterations] ??= 0;
stats[iterations]++;
console.groupEnd();
}
console.log(JSON.stringify(stats, null, 2));
}
$options = [
[null, $_LNG['TYPE_ORDER']],
['select_all', $_LNG['ALL_TYPES']],
['select_domain', $_LNG['DOMAIN']],
['select_server', $_LNG['SERVER']],
['select_ssl', $_LNG['SSL']],
['select_desing', $_LNG['DESING']],
['select_script', $_LNG['SCRIPT']],
['select_layout', $_LNG['LAYOUT']],
['select_adv', $_LNG['ADV']],
['select_seo', $_LNG['SEO']],
];
printf('const options = %s;', json_encode($options));
options
полноценный элемент select
со всеми опциями: createSelect = () => {
const select = document.createElement('select');
options.forEach(([value, title]) => {
const option = document.createElement('option');
option.innerText = title;
if (value) {
option.value = value;
} else {
option.setAttribute('disabled', true);
option.setAttribute('selected', true);
}
select.appendChild(option);
});
return select;
};
возвращает массив индексов элементов, у которые значение равно value.
const findIndex = (arr, value) => arr
.map((v, i) => ({ v, i }))
.filter(({ v }) => v === value)
.map(({ i }) => i);
Каждый элемент массива переделать в объект, где v
: элемент, а i
: индекс в массиве.бывш.элемент === value
i
setAttribute("disabled", true)
в зависимости от заполненности всех. Слушателем события "input" на каждом из полей вызывать эту функцию. const library = books.reduce((acc, c) => (acc[c.id] = c, acc), {});
const result = users.map(user => {
const books = user.books.map(id => library[id]);
return { ...user, books };
});
Codepen