function dataPage() {
fetch('example.com')
.then(response => response.json())
.then(data => {
const promises = data.URLs.map(url => fetch(url).then(r => r.json()))
return Promise.all(promises).then((arr) => {
data.arr = arr;
return data;
})
})
.then((data) => {
setState(prevState => {
return (
{
...prevState,
data // вероятно тут спред нужен по логике
}
)
})
})
}
async function loadData() {
const response = await fetch("example.com");
const data = await response.json();
const links = await Promise.all(data.URLs.map(async (url) => {
const urlResponse = await fetch("example.com");
return await urlResponse.json();
}));
setState((prevState) => ({
...prevState,
fetchObject: {
...data,
URLs: links,
},
}));
} indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.-1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.~(-1) === 00 и больше получилось тоже ненулевое число, и !! даст true-1 получится уникальный 0, и !!0 вернёт false
Object.values(Object.fromEntries(arr.map(n => [ n.user.id, n ])))
// или, если в результирующий массив должны попадать те из "одинаковых"
// элементов, что расположены в исходном массиве первыми
Object.values(arr.reduce((acc, n) => (acc[n.user.id] ??= n, acc), {}))
// или, если также надо сохранять взаимное расположение элементов
arr.filter(function({ user: { id: n } }) {
return !(this[n] = this.hasOwnProperty(n));
}, {})function* unique(data, key = n => n) {
const getKey = key instanceof Function ? key : n => n[key];
const keys = new Set;
for (const n of data) {
const k = getKey(n);
if (!keys.has(k)) {
keys.add(k);
yield n;
}
}
}const result = Array.from(unique(arr, n => n.user.id));''.concat(...unique('ABBACADCACDCEACBAEBA')) // 'ABCDE'// можете открыть консоль и проверить самостоятельно, сколько
// элементов в исходной коллекции, а сколько уникальных
[...unique(document.links, 'href')]
const first = document.querySelector('.listing');
const tag = 'p';
const arr = [...'ABCDEF'];first.after(...arr.map(n => {
const el = document.createElement(tag);
el.textContent = n;
return el;
}));
// или
first.replaceWith(first, ...arr.reduce((acc, n, i) => (
(acc[i] = document.createElement(tag)).innerText = n,
acc
), []));
// или
arr.reduce((prev, n) => (
prev.insertAdjacentElement('afterend', document.createElement(tag)),
prev.nextSibling.append(n),
prev.nextSibling
), first);
// или
const parent = first.parentNode;
const nodes = parent.childNodes;
arr.forEach(function(n) {
const el = document.createElement(tag);
el.appendChild(new Text(n));
parent.insertBefore(el, nodes[++this[0]]);
}, [ Array.prototype.indexOf.call(nodes, first) ]);
// или
first.insertAdjacentHTML(
'afterend',
arr.map(n => `<${tag}>${n}</${tag}>`).join('')
); В каком форуме можно предложить разработчикам эту идею?