Как должен выглядеть json...
[
{
title: '...',
children: [
{
title: '...',
children: [
{
title: '...',
},
...
],
},
...
],
},
...
]
...для генерации такого вложенного списка через v-for?
name: 'v-tree',
props: [ 'items' ],
<ul v-if="Array.isArray(items) && items.length">
<li v-for="n in items">
{{ n.title }}
<v-tree :items="n.children" />
</li>
</ul>
oldArray.sort((a, b) => a.id - b.id);
newArray.sort((a, b) => a.id - b.id);
oldIdx = 0;
newIdx = 0;
while (oldIdx < oldArray.length || newIdx < newArray.length) {
if (oldIdx >= oldArray.length || oldArray[oldIdx].id > newArray[newIdx].id) {
console.log(`Added id newArray[newIdx].id`);
newIdx += 1;
continue;
}
if (newIdx >= newArray.length || oldArray[oldIdx].id < newArray[newIdx].id) {
console.log(`Deleted id oldArray[oldIdx].id`);
oldIdx += 1;
continue;
}
if (oldArray[oldIdx].x !== newArray[newIdx].x) {
console.log(`Changed id newArray[newIdx].id`);
oldIdx += 1;
newIdx += 1;
}
}
`${arr}`.match(/\b\w{5}\b/g) || []
// или
arr.reduce((acc, n) => (n.length ^ '0b101' || acc.push(n), acc), [])
// или
arr.filter(n => n[4] && !n[-~4])
// или
arr.filter(RegExp.prototype.test.bind(/^.....$/))
// или
arr.reduce((acc, n) => ((acc[n.search('$')] ??= []).push(n), acc), {})[5] ?? []
// или
(function get(i, n = arr[--i]) {
return i >= 0
? get(i).concat(5 - [].push(...n) ? [] : n)
: [];
})(arr.length)
instanceof Object
.true
или false
.function getNestedData(data, test) {
const result = [];
for (const stack = [ data ]; stack.length;) {
const n = stack.pop();
if (n instanceof Object) {
stack.push(...Object.values(n).reverse());
}
if (test(n)) {
result.push(n);
}
}
return result;
}
console.log(getNestedData(tree, Number.isFinite));
async function() {
let result = null;
while (1) {
result = await fetch(...);
if (result тот, который нужен) {
break;
}
await new Promise(r => setTimeout(r, 5000));
}
return result;
}
// заменяем содержимое элемента 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 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));
}
const classPrefix = 'modal--';
Array.from(el.classList).forEach(n => el.classList.toggle(n, !!n.indexOf(classPrefix)));
el.classList.remove(...[...el.classList].filter(n => n.startsWith(classPrefix)));
for (let i = el.classList.length; i--;) {
if (el.classList[i].search(classPrefix) === 0) {
el.classList.remove(el.classList[i]);
}
}
el.classList.value = el.classList.value
.split(' ')
.filter(RegExp.prototype.test.bind(RegExp(`^(?!${classPrefix})`)))
.join(' ');
el.className = el.className.replace(RegExp(`(^| )${classPrefix}\\S*`, 'g'), '').trim();
const xxx = str => Array
.from(str, (n, i) => n.toUpperCase() + n.toLowerCase().repeat(i))
.join('-');
const xxx = str => str
.toUpperCase()
.split('')
.reduce((acc, n, i) => `${acc}${i ? '-' : ''}${n}${Array(-~i).join(n.toLowerCase())}`, '');
const xxx = str => str
.toUpperCase()
.replace(/(?<=.)./g, (m, i) => '-'.concat(m, ...Array(i).fill(m.toLowerCase())));