+/-
с +/0
и -/0
, будем считать, что ноль присутствует всегда - у нулевого элемента предыдущего нет, так что для него и запишем нулевую разность. Таким образом, монотонный массив - это такой, у которого неполный комплект различных знаков разностей соседних элементов:const isMonotone = arr =>
arr.every(function(n, i, a) {
return this.add(i && Math.sign(n - a[i - 1])).size < 3;
}, new Set);
const func = () => {
console.log('hello, world!!');
setTimeout(func, 500 + Math.random() * 1000 | 0);
};
func();
const insert = (str, ch, indices) => Array
.from(str)
.reduce((acc, n, i) => acc + (indices.includes(i) ? ch : '') + n, '');
// или
const insert = (str, ch, indices) => [...indices]
.sort((a, b) => b - a)
.reduce((acc, n) => (acc.splice(n, 0, ch), acc), [...str])
.join('');
// или
const insert = (str, ch, indices) => []
.concat(0, indices)
.sort((a, b) => a - b)
.map((n, i, a) => str.slice(n, a[i + 1]))
.join(ch);
// или
const insert = (str, ch, indices) => indices
.slice()
.sort((a, b) => b - a)
.reduce((acc, n) => acc.replace(RegExp(`(?<=.{${n}})`), ch), str);
str = insert(str, ' ', [ 1, 3, 6, 8, 10 ]);
$(window).on('scroll', function() {
const top = $(this).scrollTop();
const index = [ 50, 100, 150, Infinity ].findIndex(n => n > top);
$('.int > div').removeClass('active').eq(index).addClass('active');
}).scroll();
не могу понять, как сделать так, чтобы при втором условии числа выводились от меньшего к большему
const step = Math.sign(p2 - p1);
while (Math.abs(p2 - p1) >= 1) {
p1 += step;
console.log(p1);
}
[ p1, p2 ] = p1 > p2 ? [ p2, p1 ] : [ p1, p2 ];
while (p1 < p2) {
p1 += 1;
console.log(p1);
}
const
[ name, price, number ] =
[ 'name', 'price', 'number' ]
.map(n => document.querySelector(`input[name="${n}"]`).value.split(', '));
const arr = name.map((n, i) => ({
name: n,
price: price[i],
number: +number[i],
}));
numberInput.addEventListener('input', ({ target: t }) => {
t.value = ((t.value.match(/\d/g) || []).join('').match(/\d{1,4}/g) || []).join(' ');
});
const { position: { x, y }, cell_radius, food_size, food } = this;
const isIntersects = item =>
(item.x - x) ** 2 + (item.y - y) ** 2 <= (cell_radius + food_size) ** 2;
food.splice(0, food.length, ...food.filter(n => !isIntersects(n)));
// или
for (let i = food.length; i--;) {
if (isIntersects(food[i])) {
food.splice(i, 1);
}
}
// или
let countEaten = 0;
for (let i = 0; i < food.length; i++) {
food[i - countEaten] = food[i];
countEaten += isIntersects(food[i]);
}
food.length -= countEaten;
const index = str.search(/\d/);
.const index = str.match(/^(\D*\d)?/)[0].length - 1;
// или
const index = [...str].findIndex(n => !Number.isNaN(+n));
// или
let index = -1;
for (let i = 0; i < str.length; i++) {
if ('0123456789'.includes(str[i])) {
index = i;
break;
}
}
При движении вверх или влево координаты искажаются.
$('селектор картинок').unwrap();
function unwrap(element) {
const wrapper = element.parentNode;
const fragment = new DocumentFragment();
DocumentFragment.prototype.append.apply(fragment, wrapper.childNodes);
wrapper.parentNode.replaceChild(fragment, wrapper);
}
// или
const unwrap = ({ parentNode: wrapper }) =>
wrapper.replaceWith(...wrapper.childNodes);
document.querySelectorAll('селектор картинок').forEach(unwrap);
const newArr = arr.map((n, i) => n.repeat(i + 1));
const newArr = arr.map((n, i) => Array(i + 1).fill(n).join(''));
const newArr = arr.map((n, i) => Array(i + 2).join(n));
const newArr = [];
for (let i = 0; i < arr.length; i++) {
let str = '';
for (let j = 0; j <= i; j++) {
str += arr[i];
}
newArr.push(str);
}
const newArr = [];
for (const n of arr) {
let str = '';
while ((str = str.concat(n)).length <= newArr.length) ;
newArr[newArr.length] = str;
}
const select = document.querySelector('[name="auto_model"]');
const groups = [...select.options].reduce((acc, n) => (
n.value && (acc[n.dataset.mark] = acc[n.dataset.mark] || []).push(n),
acc
), {});
Object.entries(groups).forEach(n => {
const optgroup = document.createElement('optgroup');
optgroup.label = n[0];
optgroup.append(...n[1]);
select.append(optgroup);
});
/\w{6}/.test(password)
At least six characters long
^
- начало строки, $
- конец); символов может быть больше шести (квантификатор {}
позволяет указывать диапазон значений, верхнюю границу оставляем открытой). Т.е., правильно будет так:/^\w{6,}$/.test(password)
\w
- не alphanumeric, это ещё и _
, так что придётся перечислить нужные символы в более явном виде. Кроме того, вместо четырёх отдельных выражений можно сделать одно:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/.test(password)
document.querySelector('button').addEventListener('click', function() {
const val = +document.querySelector('#elem1').value;
const sign = Math.sign(val);
document.querySelector('#str').innerHTML = Array
.from({ length: val * sign + 1 }, (n, i) => val - i * sign)
.join('<br>');
});
$('.nextArrow, .backArrow').on('animationend', e => e.target.style.animation = '');