const sorted = (arr, key) => arr
.map(n => [ n, key(n) ])
.sort((a, b) => a[1] - b[1])
.map(n => n[0]);// если элементы с отсутствующим номером квартиры должны оказаться
// в начале, а не в конце, то вместо Infinity надо поставить 0
const sortedArr = sorted(
arr,
n => +(n.address.match(/кв.\s*(\d+)/) || [ Infinity ]).pop()
);
ul и текущий уровень. Берутся все элементы до следующего с текущим уровнем, оборачиваются в ul, затем следует рекурсивный вызов: свежесозданный ul, текущий уровень + 1.ul содержит дочерние ul:function wrap(ul, level = 0) {
const
currLevel = `.level-${level}`,
nextLevel = `.level-${level + 1}:first`;
let $li = null;
while (($li = $(ul).children(nextLevel)).length) {
const $ul = $('<ul></ul>');
$ul.append($li.nextUntil(currLevel).addBack().last().after($ul).end());
wrap($ul, level + 1);
}
}ul в li текущего уровня, находящиеся перед элементами следующего уровня:function wrap(ul, level = 0) {
const
currLevel = `.level-${level}`,
nextLevel = `.level-${level + 1}:first`;
let $li = null;
while (($li = $(ul).children(nextLevel)).length) {
const $ul = $('<ul></ul>');
$li.prev().append($ul);
$ul.append($li.nextUntil(currLevel).addBack());
wrap($ul, level + 1);
}
}
for (let i = arr.length; i--;) {
const exists = arr.hasOwnProperty(i);
if (exists || !i) {
arr.length = i + exists;
break;
}
}for (let i = arr.length; i-- && !(i in arr); arr.pop()) ;
str = str.charAt(0).toUpperCase() + str.slice(1);
// или
str = str.replace(/^./, m => m.toUpperCase());
// или
str = Array.from(str, (n, i) => i ? n : n.toUpperCase()).join('');
// или
str = (([ c = '', ...str ]) => c.toUpperCase().concat(...str))(str);
const names = [ 'DIV', 'P', 'SPAN', ... ];
if (names.includes(el.nextSibling.nodeName)) {
...
-1 - добавить значение в массив, в противном случае - удалить:const active = [];
document.addEventListener('click', ({ target: t }) => {
const value = t.dataset['data-атрибут'];
if (value) {
const index = active.indexOf(value);
if (index === -1) {
active.push(value);
} else {
active.splice(index, 1);
}
}
});document.addEventListener('click', ({ target: t }) => {
if (t.dataset['data-атрибут']) {
t.classList.toggle('active');
}
});const active = Array
.from(document.querySelectorAll('.active'), n => n.dataset['data-атрибут'])
.join(', ');
const sourceKey = 'population';
const sourceVal = 2870528;
const targetKey = 'name';const [ val ] = jp.query(cities, `$[?(@.${sourceKey} == ${sourceVal})].${targetKey}`);const val = (cities.find(n => n[sourceKey] === sourceVal) || {})[targetKey];
'use strict';Может кто то знает как решить эту проблему?
document.addEventListener('change', function(e) {
if (e.target.type === 'radio') {
e.target.closest('form').querySelector('.output').textContent = e.target.value;
}
});
const duplicates = Array
.from(arr.reduce((acc, n) => acc.set(n.id, acc.has(n.id)), new Map))
.reduce((acc, n) => (n[1] && acc.push(n[0]), acc), []);
// или
const duplicates = arr.reduce((acc, { id }) => (
(acc[1][id] = -~acc[1][id]) === 2 && acc[0].push(id),
acc
), [ [], {} ])[0];
// или
const duplicates = [...arr
.reduce((acc, n) => (acc[+acc[0].has(n.id)].add(n.id), acc), [ new Set, new Set ])
.pop()
];
// или
const duplicates = arr
.map(n => n.id)
.filter((n, i, a) => i !== a.indexOf(n))
.filter((n, i, a) => i === a.indexOf(n));
// или
const duplicates = arr.reduce((acc, { id: n }, i, a) => (
!acc.includes(n) && i !== a.findIndex(m => m.id === n) && acc.push(n),
acc
), []);
.active
background-color: #77b97e
color: #fff
&:hover
background-color: #99db8fdocument.addEventListener('click', ({ target: { classList: cl } }) =>
cl.contains('calendar__mounth-day') && cl.toggle('active')
);id у чекбоксов и for у label'ов такими, чтобы клик по label'у переключал состояние чекбокса. Т.е., одинаковыми для пары из чекбокса и соответствующего ему label'а, уникальными для каждой из пар..calendar__mounth-list input:checked + label
background-color: #77b97e
color: #fff
&:hover
background-color: #99db8f
$('.slider').slider('values', [ thisfrom, thisto ]);
const colors = [ 'red', 'orange', 'yellow', 'green', 'aqua', 'blue', 'magenta' ];let index = -1;+ 1 и меняете цвет background'а:hoverEl.addEventListener('mouseenter', () => {
index = (index + 1) % colors.length;
colorEl.style.backgroundColor = colors[index];
});