grouped = {}
for n in products:
category = n['category']['name']
group = grouped.setdefault(category, {})
group[n['productId']] = { 'name': n['name'] }
$newArr = array_filter($arr, fn($n) => explode('.', $n)[1] !== '08');for ($i = 0, $j = 0; $i < count($arr); $i++) {
if (explode('.', $arr[$i])[1] === '08') {
$j++;
} else if ($j) {
$arr[$i - $j] = $arr[$i];
}
}
array_splice($arr, -$j, $j);
const [ showAll, setShowAll ] = useState(false);
const defaultShow = 2;
const showAllByDefault = ingredients.length <= defaultShow;
const ingredientsToShow = (showAll || showAllByDefault)
? ingredients
: ingredients.slice(0, defaultShow);{showAllByDefault
? null
: <button onClick={() => setShowAll(val => !val)}>{showAll ? 'hide' : 'show'}</button>
}
<ul>
{ingredientsToShow.map(n => <li>{n}</li>)}
</ul>
const props = defineProps({
showBgBlue: {
type: Boolean,
default: true,
},
});
const mainClass = computed(() => props.showBgBlue ? 'bg-blueGray-50 py-12' : 'bg-white');
const sum = data =>
Array.isArray(data)
? data.reduce((acc, n) => acc + sum(n), 0)
: (+data || 0);function sum(data) {
const stack = [];
let result = 0;
for (let i = 0, arr = [ data ]; i < arr.length || stack.length; i++) {
if (i === arr.length) {
[ i, arr ] = stack.pop();
} else if (arr[i] instanceof Array) {
stack.push([ i, arr ]);
[ i, arr ] = [ -1, arr[i] ];
} else {
result += +arr[i] || 0;
}
}
return result;
}true, '0xBB', { valueOf: () => 666 } и т.д.
Странно, но все работает, несмотря на ошибку:
TypeError: Cannot read properties of null (reading 'insertAdjacentHTML').
arr.forEach(n => {
const el = document.getElementById(n.id);
if (el) {
el.innerHTML = `
<h2>Id: ${n.id}</h2>
<h3>${n.title}</h3>
<p>${n.body}</p>
`;
}
});for (const { id, title, body } of arr) {
document.querySelector(`[id="${id}"]`)?.insertAdjacentHTML('beforeend', `
<h2>Id: ${id}</h2>
<h3>${title}</h3>
<p>${body}</p>
`);
}section изначально будет пустым):document.querySelector('section').innerHTML = arr
.map(n => `
<div id="post-${n.id}">
<h2>Id: ${n.id}</h2>
<h3>${n.title}</h3>
<p>${n.body}</p>
</div>`)
.join('');const limit = document.querySelector('section').children.length;
const requestURL = `https://jsonplaceholder.typicode.com/posts?_limit=${limit}`;const requestURL = 'https://jsonplaceholder.typicode.com/posts?' + Array
.from(document.querySelector('section').children, n => `id=${n.id}`)
.join('&');
new Vue({loaves: [this.loaves[idx] =
const elements = document.querySelectorAll('[name^=AR_AMOUNT]');const sum = Array.prototype.reduce.call(
elements,
(acc, n) => acc + +n.value,
0
);
// или
let sum = 0;
for (const { value } of elements) {
sum += Number(value);
}
// или
let sum = 0;
for (let i = 0; i < elements.length; i++) {
sum = sum + elements.item(i).value * 1;
}0:const sum = (function sum(i, n = elements[i]) {
return n ? parseFloat(n.value) + sum(i + 1) : 0;
})(0);+, в строку; строку отдаём в eval; всё, сумма получена (ну, почти, если исходная коллекция элементов была пуста, то строка тоже будет пустой, так что надо не забыть подставить 0 вместо возможного undefined, который является результатом выполнения пустой строки):const sum = eval(Array.from(elements, n => n.value).join('+')) ?? 0;
function Typewriter({ text }) {
const [ length, setLength ] = useState(0);
useEffect(() => {
setLength(0);
const interval = setInterval(setLength, 100, length => {
if (++length >= text.length) {
clearInterval(interval);
}
return length;
});
return () => clearInterval(interval);
}, [ text ]);
return <div>{text.slice(0, length)}</div>;
}
// заменяем содержимое элемента main
main.innerHTML = arr.reduceRight(
(content, tag) => `<${tag}>${content}</${tag}>`,
''
);
// или, дополняем его
main.insertAdjacentHTML(
'beforeend',
(function next(i, tag = arr[i] ?? '') {
return tag && `<${tag}>${next(-~i)}</${tag}>`;
})(0)
);// замена контента
main.replaceChildren(...arr.reduceRight((content, tag) => {
const el = document.createElement(tag);
el.append(...content);
return [ el ];
}, []));
// или, добавление
arr.reduce((el, tag) => (
el.appendChild(document.createElement(tag)),
el.lastChild
), main);
const merge = (target, ...sources) =>
sources.reduce((acc, n) => (
Object.entries(n).forEach(([ k, v ]) =>
acc[k] = v instanceof Object
? merge(acc[k] instanceof Object ? acc[k] : {}, v)
: v
),
acc
), target);
const result = merge({}, ...arrayObj);
const sorted = (data, key) => Array
.from(data, n => [ key(n), n ])
.sort(([a], [b]) => a < b ? -1 : +(a > b))
.map(n => n[1]);const sortChildren = (el, key) =>
el.append(...sorted(el.children, key));<button data-order="-1">От большего к меньшему</button>
<button data-order="+1">От меньшего к большему</button>.catalog-items (вес элемента - число внутри, умноженное на направление сортировки), кликнутой кнопке класс добавляем, у остальных убираем:const wrapper = document.querySelector('.catalog-items');
const buttons = document.querySelectorAll('[data-order]');
buttons.forEach(n => n.addEventListener('click', onClick));
function onClick({ target: t }) {
const order = +t.dataset.order;
sortChildren(wrapper, el => parseInt(el.innerText) * order);
buttons.forEach(n => n.classList.toggle('active', n === t));
}
В документации не нашёл явных примеров.
options: {
plugins: {
legend: {
onClick(e, legendItem, { chart }) {
this.legendItems.forEach((n, i) => {
chart.getDatasetMeta(i).hidden = n !== legendItem && (legendItem.hidden || !n.hidden);
});
chart.update();
},
},
},
},
nextEl: prevRef.currentconst [ swiper, setSwiper ] = useState();<Swiper
onSwiper={setSwiper}
...- ref={prevRef}
+ onClick={() => swiper.slidePrev()}
$arrToStr = fn($arr) => implode(', ', array_map(fn($v, $k) => "$k: $v", $arr, array_keys($arr)));
echo implode("\n", array_map($arrToStr, $users));
- $('.play').attr('data-play', video);
+ $('.play').data('play', video);- video = $(this).data('video');
+ video = $(this).attr('data-video');
- atplay = $(this).data('play');
+ atplay = $(this).attr('data-play');data-* attributes are used to initialize jQuery data. An element's data-* attributes are retrieved the first time the data() method is invoked upon it, and then are no longer accessed or mutated
const play = document.querySelector('.play');
document.querySelectorAll('.paskal').forEach(function(n) {
n.addEventListener('click', this);
}, e => play.dataset.play = e.currentTarget.dataset.video);
play.addEventListener('click', e => {
console.log(e.currentTarget.dataset.play);
});