const includes = (a, b) => Object.entries(b).every(([ k, v ]) => Object.is(v, a[k]));
const check = (a, b) => Object.values(a).some(n => includes(n, b));
const result = check(parent, { a: '1', b: '1' });
winPositions.some(n => n.every(m => xPositions.includes(m)))
const wrapper = document.querySelector('.block');
const blockSelector = '.block_one';
const activeClass = 'active';
wrapper.addEventListener('mouseover', onHover);
wrapper.addEventListener('mouseout', onHover);
function onHover({ type, target }) {
const block = type === 'mouseover' && target.closest(blockSelector);
this.querySelectorAll(blockSelector).forEach(n => {
n.classList.toggle(activeClass, !!block && n !== block);
});
}.block:has(.block_one:hover) .block_one:not(:hover) {
/* сюда переносим стили того класса, который через js добавлялся */
}
document.querySelectorAll('.number').forEach(n => {
n.innerText = n.innerText.replace(/\d+/g, m => (+m).toLocaleString());
});for (const n of document.getElementsByClassName('number')) {
n.textContent = n.textContent.replace(/\d(?=(\d{3})+(\D|$))/g, '$& ');
}
fetch('https://api.novaposhta.ua/v2.0/json/', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
modelName: 'Address',
calledMethod: 'getWarehouses',
methodProperties: {
CityName: document.querySelector('.myCityName').textContent,
},
apiKey: '',
}),
})
.then(r => r.json())
.then(r => {
document.querySelector('.mySelect').innerHTML = r.data
.map(n => `<option>${n.Description}</option>`)
.join('');
});
setInterval(tesla.moveRight,30)setInterval(tesla.moveRight.bind(tesla), 30)setInterval(() => tesla.moveRight(), 30)class Car {
...
moveRight = () => {
...
}
}
используется для получения и установки инлайновых стилей
const result = arr
.reduce((acc, n, i, a) => (
a[i - 1] !== n && acc.push([ n, 0 ]),
acc[acc.length - 1][1]++,
acc
), [])
.map(([ v, c ]) => c < 2 ? v : Array(c).fill(v));const result = arr
.reduce((acc, n, i, a) => (
a[i - 1] === n || acc.push([]),
acc[acc.length - 1].push(n),
acc
), [])
.map(n => n.length === 1 ? n[0] : n);const result = arr.reduce((acc, n, i, a) => {
const prev = n === a[~-i];
const next = n === a[-~i];
!prev && next && acc.push([]);
(prev || next ? acc[~-acc.length] : acc).push(n);
return acc;
}, []);
const length = 48;
const step = 30;
const locale = 'en-US';
const options = {
hour: '2-digit',
minute: '2-digit',
};const times = Array.from({ length }, (_, i) => {
return new Date(0, 0, 0, 0, step * i).toLocaleTimeString(locale, options);
});
// или
const times = Array.from({ length }, function() {
return this[1].format(this[0].setMinutes(this[0].getMinutes() + step));
}, [ new Date(0, 0, 0, 0, -step), new Intl.DateTimeFormat(locale, options) ]);
[...`${num}`].map(Number)num.toString().split('').map(n => +n)Array.from(String(num), parseFloat)('' + num).match(/./g).map(n => parseInt(n))Object.values(num.toFixed()).map(n => ~~n)[].map.call(/.+/.exec(num)[0], n => n * 1)eval('['.concat(num, ']').replace(/\d/g, '$&,'))Object.assign([], JSON.stringify(num)).map(JSON.parse)Array(1 + (Math.log10(num) | 0)).fill().map((n, i) => (num / 10 ** i | 0) % 10).reverse()((f = (x, a) => (a.unshift(x % 10), x = x / 10 | 0, x ? f(x, a) : a)) => f(num, []))()
const data = {
[name]: value,
};const data = Object.fromEntries([ [ name, value ] ]);
<table>
<tr>
<td><div class="draggable">0</div></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><div class="draggable">1</div></td>
<td><div class="draggable">2</div></td>
</tr>
<tr>
<td></td>
<td><div class="draggable">3</div></td>
<td></td>
</tr>
</table>td {
border: 1px solid silver;
width: 100px;
height: 100px;
}
.draggable {
display: inline-block;
width: 25px;
height: 25px;
background: red;
cursor: pointer;
margin: 5px;
color: white;
}$('.draggable').draggable({
containment: 'table',
stop(e, ui) {
$(this).css({
left: '',
top: '',
});
},
});
$('td').droppable({
accept: '.draggable',
drop(e, ui) {
ui.draggable.appendTo(this);
},
});