const getCheckedValues = elements =>
[...elements].reduce((acc, n) => (
n.checked && (acc[n.name] = acc[n.name] || []).push(n.value),
acc
), {});
const getCheckedValues = elements =>
Array.prototype.reduce.call(
elements,
(acc, { name, value, checked }) => (
acc[name] = acc[name] || [],
checked && acc[name].push(value),
acc
),
{}
);
Получается, что объявляем две переменных <...> То есть это равносильно
Что не так делаю?
let uploadTo = null;
$('.file-upload-preview').click(function() {
uploadTo = this;
$('#file-upload').click();
});
$(".file-upload-preview")
на $(uploadTo)
. const inputSelector = '.hidden_field';
const itemSelector = '.item';
const activeClass = 'active';
// как это может выглядеть с использованием jquery
const $items = $(itemSelector).click(function() {
$(this).toggleClass(activeClass);
$(inputSelector).val($items
.filter(`.${activeClass}`)
.get()
.map(n => $(n).text())
.join(', ')
);
});
// или, к чёрту jquery
const items = [...document.querySelectorAll(itemSelector)];
items.forEach(n => n.addEventListener('click', onClick));
function onClick() {
this.classList.toggle(activeClass);
document.querySelector(inputSelector).value = items
.filter(n => n.classList.contains(activeClass))
.map(n => n.innerText)
.join(', ');
}
const result = Object.entries(commonObj).map(([ k, v ]) => ({
objDataName: (objectData.find(n => n.key === k) || {}).name || null,
packageName: (packageData.find(n => n.id === v.package_id) || {}).title || null,
}));
const arrToObj = (arr, key, val) =>
arr.reduce((acc, n) => (acc[n[key]] = n[val], acc), {});
const objects = arrToObj(objectData, 'key', 'name');
const packages = arrToObj(packageData, 'id', 'title');
const result = Object.entries(commonObj).map(n => ({
objDataName: objects[n[0]] || null,
packageName: packages[n[1].package_id] || null,
}));
for (let i = 0; i < 6; i++) {
const count = res.data.filter(n => +n.categoryid === i).length;
$(`#category_count_${i}`).html(`(${count})`);
}
checked
не приводит к возникновению события change
, так что его следует создавать самостоятельно - добавьте .trigger('change')
после вызова prop
. const getChunks = (arr, chunkSize) =>
Array.from(
{ length: Math.ceil(arr.length / chunkSize) },
(n, i) => arr.slice(i * chunkSize, (i + 1) * chunkSize)
);
// или
const getChunks = (arr, chunkSize) =>
arr.reduce((acc, n, i) => (
i = i / chunkSize | 0,
(acc[i] = acc[i] || []).push(n),
acc
), []);
// или
const getChunks = (arr, chunkSize) =>
arr.reduce((acc, n, i) => (
(i % chunkSize) || acc.push([]),
acc[acc.length - 1].push(n),
acc
), []);
const arr = [...Array(50).keys()];
const chunks = getChunks(arr, 7);
Ведь у пустого массива есть численное представление: +[] вернет 0.
false+[]
нет преобразования массива в число. Есть сложение - массив преобразовывается в строку, false тоже. Если интересуют детали - можете ознакомится со спецификацией. <div id="sound-btn-wrapper">
<div class="btn btn-start">On</div>
<div class="btn btn-stop">Off</div>
</div>
const audio = new Audio('...');
$('#sound-btn-wrapper').on('click', '.btn', function() {
audio.pause();
if ($(this).hasClass('btn-start')) {
audio.currentTime = 0;
audio.play();
}
});
function simpleSlider(element) {
const root = typeof element === 'string'
? document.querySelector(element)
: element;
const items = root.querySelectorAll('.slider__item');
const prev = root.querySelector('.slider__btn-prev');
const next = root.querySelector('.slider__btn-next');
let index = 0;
function slideTo(newIndex) {
items[index].classList.remove('slider__item--active');
index = (newIndex + items.length) % items.length;
items[index].classList.add('slider__item--active');
}
prev.addEventListener('click', () => slideTo(index - 1));
next.addEventListener('click', () => slideTo(index + 1));
}
simpleSlider('#slider1');
simpleSlider(document.querySelector('#slider2'));
const elements = [...document.getElementsByTagName('p')];
// или
const elements = Array.from(document.getElementsByTagName('p'));
// или
const elements = [].concat.apply([], document.getElementsByTagName('p'));
// или
const elements = Array.prototype.slice.call(document.getElementsByTagName('p'));
// или
const elements = Object.values(document.getElementsByTagName('p'));