【问题标题】:How to filter data and show it on top of the array?如何过滤数据并将其显示在数组顶部?
【发布时间】:2022-01-10 14:48:02
【问题描述】:

我正在做一个去中心化的交易所,我正在尝试实现一个搜索功能,用户可以在其中输入代币地址、名称或符号。但我面临的挑战是,当用户搜索BUSD 之类的代币时,用户钱包中的代币将排在首位。 例如:-

假设我的钱包中有这些代币,并且我从 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"
    }
  ]

现在,如果用户在他们的搜索框中搜索 BUS 并且他们获得了超过 20 或 30 个令牌的列表,那么我想过滤该数组并希望匹配搜索到的令牌响应的符号和我钱包中存在的令牌和然后在顶部显示钱包中存在的代币,并在搜索列表中根据其名称或符号(字母顺序)显示其余代币。

我尝试在网络上搜索此内容,但没有得到任何相关信息。

这是我的代码:

// 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))

【问题讨论】:

  • @PeterB 不幸的是,这不是我想要的
  • 对我来说,这听起来完全可以满足您的要求:shows the token present in a wallet on the top and show rest of the tokens according to their name or symbol (Alphabetic order) in the search list。据我了解,您想先用某些项目对数组进行重新排序,然后再对其他项目重新排序,这也是副本的意义所在。
  • @PeterB 我的情况不能正常工作。

标签: javascript arrays reactjs sorting


【解决方案1】:

也许这种方法会有所帮助。先过滤进出钱包的结果,然后组合成一个数组。

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}

--- 更新---

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}

【讨论】:

  • 使用对象更新并减少作为元素分隔符。
  • 成功了!非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多