Estoy haciendo un intercambio descentralizado en el que estoy tratando de implementar una funcionalidad de búsqueda donde los usuarios colocan la dirección, el nombre o el símbolo del token. Pero el desafío al que me enfrento es que cuando los usuarios busquen tokens como BUSD , el token presente en la billetera del usuario aparecerá en primer lugar. por ejemplo:-
supongamos que tengo estos tokens en mi billetera y recibo esta respuesta de web3
[ { "token_address":"0x0e262..........", "name":"Busy DAO", "symbol":"BUSY", "logo":null, "thumbnail":null, "decimals":"18", "balance":"685485000000000000000000" },{ "token_address":"0x1f762..........", "name":"BUSD Token", "symbol":"BUSD", "logo":null, "thumbnail":null, "decimals":"18", "balance":"32491651588824863" } ] Ahora, si los usuarios buscaron BUS en su cuadro de búsqueda y obtienen una lista de más de 20 o 30 tokens, entonces quiero filtrar esa matriz y quiero hacer coincidir el símbolo de la respuesta del token buscado y el token presente en mi billetera y luego mostrar el token presente en una billetera en la parte superior y muestra el resto de los tokens según su nombre o símbolo (orden alfabético) en la lista de búsqueda.
Intenté buscar esto en la web pero no obtuve nada al respecto.
Aquí está mi código:
// wallet assets const getWalletAssets = useMoralisWeb3ApiCall(moralisWeb3Api.account.getTokenBalances, { chain: 'bsc', address: connectedWallet }) // Token Search filter (getting tokens) const searchTokenName = coins.filter((c) => c.name.toLowerCase().includes(search.toLowerCase())) // Sorting them according to their symbols (alphabetic order) const searchToken = tokenData.sort((a, b) => a.symbol.localeCompare(b.symbol))Tal vez este enfoque sería útil. Primero filtre los resultados que están dentro y fuera de la billetera y luego combínelos en una matriz.
const searchResults = ['BNB','BNT','BORA','BSV','BTC','BTCB','BTCST','BTG','BTT','BUSD','DASH','DCR','DENT','DGB','DOGE','ELON','ENJ','EOS','ETC','ETH','EWT','FEI','FET','FIL']; const walletCoins = ['BTC','DOGE','ETH', '1INCH']; const resultInWallet = searchResults.filter((coin) => walletCoins.includes(coin)); const resultNotInWallet = searchResults.filter((coin) => !walletCoins.includes(coin)); const result = [...resultInWallet, ...resultNotInWallet]; console.log(result) .as-console-wrapper{min-height: 100%!important; top: 0}--- actualizado ---
const searchResults = [{symbol:'BNB'},{symbol:'BNT'},{symbol:'BTC'},{symbol:'BTCB'},{symbol:'BTCST'},{symbol:'BTG'},{symbol:'BTT'},{symbol:'BUSD'},{symbol:'DOGE'},{symbol:'ELON'},{symbol:'ETC'},{symbol:'ETH'},{symbol:'EWT'},{symbol:'FEI'}]; const walletCoins = [{symbol:'BTC'},{symbol:'DOGE'},{symbol:'ETH'},{symbol:'1INCH'}]; const resultObj = searchResults.reduce((acc, targetCoin) => { if (walletCoins.some((walletCoin) => walletCoin.symbol === targetCoin.symbol)) { acc.inWallet = [...acc.inWallet, targetCoin]; } else { acc.notInWallet = [...acc.notInWallet, targetCoin]; } return acc; }, { inWallet: [], notInWallet:[] }); const result = [...resultObj.inWallet, ...resultObj.notInWallet]; console.log(result); .as-console-wrapper{min-height: 100%!important; top: 0}