首页 > 解决方案 > 从文本数组中找到一个符号,如果下一个元素也是一个符号,则将它们都推入

问题描述

我有一个文本数组和一个符号,当前代码执行此操作:在文本数组中搜索,如果文本数组中有符号数组的元素,将其推入一个新数组(coinsArr)

我想从文本数组中找到一个符号,如果下一个元素也是一个符号,则将它们(当前符号和元素以及下一个元素,这也是一个符号)都推入它们之间。

所以这是我的代码:

const text = [
  'aaaa', 'BTC',
  '08', '324',
  'ETH', '233',
  'yyyy', '30000',
  'XRP', 'xxxxxGG',
  'llll', '546',
  'BCH', 'LTC',
  'xxxyyy', '435',
  'XLM', 'DASH',
  'COIN'
];

const symbols = ['XLM', 'XTZ', 'BTC', 'DASH', 'ETH', 'LTC', 'BNB', 'BCH', 'XRP'];


const coinsArr = [];
for (let i = 0; i < text.length; i++) {
  for (let j = 0; j < symbols.length; j++) {
    const el = symbols[j];
    if (el == text[i]) {
      coinsArr.push(el);
    }
  }
}
console.log({
  'coinsArr': coinsArr
});

并给出这个输出(只需在文本数组中搜索并找到符号):

['BTC','ETH','XRP','BCH','LTC','XLM','DASH','COIN']

但我想要这个输出:

['BCH/LTC','XLM/DASH']

标签: javascriptarrays

解决方案


您可以使用reduce轻松实现结果并优化symbols使用Set的访问

const text = [
  'aaaa', 'BTC',
  '08', '324',
  'ETH', '233',
  'yyyy', '30000',
  'XRP', 'xxxxxGG',
  'llll', '546',
  'BCH', 'LTC',
  'xxxyyy', '435',
  'XLM', 'DASH',
  'COIN'
];

const symbols = ['XLM', 'XTZ', 'BTC', 'DASH', 'ETH', 'LTC', 'BNB', 'BCH', 'XRP'];

const set = new Set(symbols);

const result = text.reduce((acc, curr, i, src) => {
  const next = src[i + 1];
  if (set.has(curr) && set.has(next)) acc.push(`${curr}/${next}`);
  return acc;
}, []);

console.log(result);


推荐阅读