Проблема в сравнение массивов объектов js
Мне api возвращает 4 массива объектов(coinEthChain, coinBscChain и т.д). У каждого объекта есть symbol и я их сравниваю, чтобы узнать, если ли одинаковые symbol в coinEthChain и coinBscChain. Но столкнулся с двумя проблемами:
- Чтобы пройтись по объектам, я создаю цикл for и константу minLength, чтобы цикл не был бесконечным. Но из-за того что в первом массиве объектов больше, чем в во втором, то не все объекты сравниваются. А если я укажу max, то будет ошибка.
- При таком сравнение как у меня сейчас, почему-то одинаковые symbol не добавляются в массив, они просто пропускаются, хоть в первом и во втором массиве есть одинаковые symbol, например: AAVE. Не понимаю почему так происходит.
const apiUrlBsc = 'https://tokens.coingecko.com/binance-smart-chain/all.json';
const apiUrlPolygon = 'https://tokens.coingecko.com/polygon-pos/all.json';
const apiUrlAvalanche = 'https://tokens.coingecko.com/avalanche/all.json';
let coinEthChain = [];
let coinBscChain = [];
let coinPolChain = [];
let coinAvaxChain = [];
// Функция для получения данных по API и заполнения соответствующего массива
function fetchData(apiUrl, coinArray) {
return fetch(apiUrl)
.then(response => {
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.statusText}`);
}
return response.json();
})
.then(data => {
data.tokens.forEach((coin) => {
coinArray.push(coin);
});
})
.catch(error => {
console.error('Fetch error:', error);
});
}
// Последовательный вызов функций fetchData для каждого API
fetchData(apiUrlEth, coinEthChain)
.then(() => fetchData(apiUrlBsc, coinBscChain))
.then(() => fetchData(apiUrlPolygon, coinPolChain))
.then(() => fetchData(apiUrlAvalanche, coinAvaxChain))
.then(() => {
// Вызов compareArraysBySymbol после получения всех данных
compareArraysBySymbol(coinEthChain, coinBscChain, coinPolChain, coinAvaxChain);
});
console.log(coinEthChain);
console.log(coinBscChain);
function compareArraysBySymbol(array1, array2, array3, array4) {
const commonSymbols = [];
const minLength = Math.min(array1.length, array2.length);
for (let i = 0; i < minLength; i++) {
if(array2[i].symbol == array1[i].symbol) {
commonSymbols.push(array1[i].symbol);
console.log(array1[i].symbol);
}
}
return commonSymbols;
}```