function App() {
const [ items, setItems ] = useState([]);
const onItemClick = ({ target: { dataset: { id } } }) =>
setItems(items.filter(n => n !== +id));
const onAddNewClick = () =>
setItems([ ...items, 1 + Math.max(0, ...items) ]);
return (
<div>
{items.map(n => <button onClick={onItemClick} data-id={n}>#{n}</button>)}
<button onClick={onAddNewClick}>add</button>
</div>
);
}
data: () => ({
items: [ ... ], // массив данных
columns: 666, // количество колонок, на которые надо разбить items
}),
computed: {
columnItems() {
const { items, columns } = this;
const colSize = Math.ceil(items.length / columns);
return Array.from(
{ length: columns },
(n, i) => items.slice(i * colSize, (i + 1) * colSize)
);
},
},
<ul v-for="col in columnItems">
<li v-for="n in col">{{ n }}</li>
</ul>
<img v-for="i in 5" :src="i > ratingValue ? whiteStar : blackStar">
Array
.from(document.querySelectorAll('.obj'))
.filter(n => n.querySelector('.who')?.innerText !== 'Я')
.forEach(n => console.log(n.innerText));
const itemSelector = 'здесь должен селектор элементов, которые надо переместить';
const containerSelector = 'а здесь - селектор контейнеров';
const chunkSize = 3;
const $items = $(itemSelector);
$(containerSelector).append(i => $items.slice(i * chunkSize, (i + 1) * chunkSize));
// или
const $containers = $(containerSelector);
$(itemSelector).each((i, n) => $containers.eq(Math.floor(i / chunkSize)).append(n));
document.querySelectorAll(containerSelector).forEach(function(n, i) {
n.append(...this.slice(i * chunkSize, -~i * chunkSize));
}, [...document.querySelectorAll(itemSelector)]);
// или
const containers = document.querySelectorAll(containerSelector);
for (const [ i, n ] of document.querySelectorAll(itemSelector).entries()) {
containers[i / chunkSize | 0]?.appendChild(n);
}
$('label > input').change(function() {
$(this).parent().toggleClass('active', this.checked);
});
functional: true,
render: (h, ctx) => h('div', Array(ctx.props.количествоПовторений).fill(ctx.slots().default)),
<option
v-for="(n, i) in options"
v-text="n"
v-bind="!i && { disabled: true, value: '' }"
></option>
<option disabled value="">выбирай!</option>
<option v-for="n in options">{{ n }}</option>
Если strict не установлен, то при поиске будет использовано нестрогое сравнение.
В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа.
Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль).
map.events.add('boundschange', function() {
map.balloon.setPosition(map.getCenter());
});
map.events.add('actiontickcomplete', function(e) {
const { globalPixelCenter, zoom } = e.get('tick');
map.balloon.setPosition(map.options.get('projection').fromGlobalPixels(globalPixelCenter, zoom));
});
const containerSelector = '.card_options > div';
const itemSelector = '.option';
const activeClass = 'checked';
const toggleItem = item => item
?.closest(containerSelector)
.querySelectorAll(itemSelector)
.forEach(n => n.classList[n === item ? 'toggle' : 'remove'](activeClass));
// можно добавить обработчик клика каждому элементу индивидуально
document.querySelectorAll(itemSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => toggleItem(e.currentTarget));
// а можно один раз - делегированный, всей странице
document.addEventListener('click', e => {
toggleItem(e.target.closest(itemSelector));
});
$dataStr = file_get_contents('https://corona-virus-stats.herokuapp.com/api/v1/cases/general-stats');
$dataObj = json_decode($dataStr);
$props = [ 'total_cases', 'recovery_cases', 'death_cases' ];
echo implode('<br>', array_map(function($n) use($dataObj) {
return $n.': '.$dataObj->data->$n;
}, $props));