const Search = props => {
const [ value, setValue ] = React.useState('');
return (
<div>
<input type="text" value={value} onChange={e => setValue(e.target.value)} />
<button onClick={() => props.onSearch(value)}>Search</button>
</div>
);
};<Search onSearch={search => setValue({ ...value, inputValue: search })} />
.img-block, а у их самых дальних не общих предков, т.е., у .documents_block. В этом случае не придётся переписывать js-код, если вдруг потребуется стилизовать ещё-что то, кроме .img-block, или если решите изменить внутреннюю структуру .documents_block. Вместо .класс дополнительные стили надо будет прописывать у .класс .img-block.const itemSelector = '.documents_block';
const buttonSelector = `${itemSelector} .open-doc-list`;
const contentSelector = '.documents-content';
const activeClass = 'active';
const toggleEffect = 'slideToggle'; // или fadeToggle, или toggle
const onClick = e => $(e.currentTarget)
.closest(itemSelector)
.toggleClass(activeClass)
.find(contentSelector)
[toggleEffect]();
// обработчик клика подключаем к кнопкам
$(buttonSelector).click(onClick);
// или, если предполагается добавление новых блоков уже после подключения
// обработчика, то лучше будет повесить его на документ, тогда всё будет
// работать как надо без каких-либо дополнительных действий
$(document).on('click', buttonSelector, onClick);
const fourValues = four.map(Object.values);
const result = three.map(n => {
const values = Object.values(n);
const intersections = fourValues.filter(m => values.every(v => m.includes(v)));
return `${values} - ${intersections.length
? `входит в / ${intersections.map(m => `${m}`).join(' / ')} /`
: 'нет вхождений'}`;
});
const containerSelector = '.bakeries-slider';
const itemSelector = '.bakeries-slider__span';const getNumber = i => (i + 1) + '.';
// или
const getNumber = i => `${-~i}.`;
// или
const getNumber = i => ''.concat(++i, '.');$(containerSelector).each(function() {
$(itemSelector, this).text((i, text) => text + getNumber(i));
});document.querySelectorAll(containerSelector).forEach(container => {
const items = container.querySelectorAll(itemSelector);
// индекс передаётся в коллбек forEach'а
items.forEach((n, i) => n.textContent += getNumber(i));
// или, отдаётся итератором entries
for (const [ i, n ] of items.entries()) {
n.appendChild(document.createTextNode(getNumber(i)));
}
// или, можно самостоятельно обновлять переменную с индексом
for (let i = 0; i < items.length; i++) {
items[i].insertBefore(new Text(getNumber(i)), null);
}
// причём цикл для этого не обязателен
(function next(i, n = items.item(i)) {
n && (n.append(getNumber(i)), next(-~i));
})(0);
});
$('#m_prev').click и $('#m_next').click за пределы $('.norutyun img').click.
return {
...state,
basketItems: state.basketItems.map(n => n.id === action.id
? { ...n, clicked: !n.clicked }
: n
),
};
const key = 'status';
const value = 'maybe';const newArr = arr.filter(n => !n[key].includes(value));const reg = RegExp(`\\b${value}\\b`);
const newArr = arr.filter(n => !reg.test(n[key]));
// или
const newArr = arr.filter(function(n) {
return !n[key].match(this);
}, RegExp(`(^| )${value}( |$)`));
// или
const newArr = arr.filter(n => !n[key].split(' ').includes(value));
$('#sortable').sortable({
stop() {
const values = $('input[name="slider-id"]', this).get().map(n => n.value);
},
});
const key = 'workplace';
const values = [ 'office', 'hotel' ];const result = arr.filter(function(n) {
return this.has(n[key]);
}, new Set(values));
// или
const result = values.flatMap(((grouped, n) => grouped[n] ?? []).bind(
null,
arr.reduce((acc, n) => ((acc[n[key]] = acc[n[key]] ?? []).push(n), acc), {})
));
// или
const result = [];
for (const n of arr) {
for (const m of values) {
if (m === n[key]) {
result.push(n);
break;
}
}
}
// или
const result = [];
for (let i = 0; i < arr.length; i++) {
if (~values.indexOf(arr[i][key])) {
result[result.length] = arr[i];
}
}
// или
const result = (function get(i, n = arr[i]) {
return n
? [].concat(values.includes(n[key]) ? n : [], get(-~i))
: [];
})(0);
search = [ 'White', 'Black', 'Asian', 'Hispanic' ]
max = arr
.select{|n| search.include?(n['description'])}
.max_by{|n| n['count']}