@1233211

Как правильно распарсить такой массив со строками?

Подскажите, пожалуйста, как правильно распарсить такой массив?

["Program 77t7GNZrGdZ9ziLKj9J3Vo3wvazgoom4Z3WAR9KijdhV invoke [1]",
"Program log: Instruction: UserLogState",
"Program log: user_base_balance = 4010038",
"Program log: user_pc_balance = 4012886",
"Program log: user_lp_balance = 0",
"Program log: user_reward_1_balance = 0",
"Program log: user_reward_2_balance = 0",
"Program log: raydium_lp_balance = 210638912915",
"Program log: raydium_reward_1_balance = 0",
"Program log: raydium_reward_2_balance = 0",
"Program log: total_token_base = 68057745396969",
"Program log: total_token_pc = 67861938466524",
"Program log: total_token_lp = 14480978303835910972",
"Program 77t7GNZrGdZ9ziLKj9J3Vo3wvazgoom4Z3WAR9KijdhV consumed 35385 of 1400000 compute units",
"Program 77t7GNZrGdZ9ziLKj9J3Vo3wvazgoom4Z3WAR9KijdhV success"]


Нужно получить объект типа {user_base_balance:4010038, user_pc_balance: 4012886} и так далее.

Как правильно это сделать, через regExp парсить или как?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
arr.reduce((acc, n) => (
  n = n.match(/(\S+) = (.*)/),
  n && (acc[n[1]] = n[2]),
  acc
), {})
Ответ написан
@krakaka
Да можно в принципе и в лоб написать функцию ) Регулярные выражения трудно поддерживать, а код ведь надо максимально понятным держать. Минус решения в лоб в том, что есть завязка конкретно на такой формат данных, и если что-то в них поменяется - надо будет менять и функцию, но с другой стороны регулярное выражение тоже надо будет править, так что..

const parseArrayOfLines = (arrayOfLines) => {
  const result = {};
  
  try {
    arrayOfLines.forEach((line) => {
      const lineTokens = line.split(' ');
      const equalsPosition = lineTokens.indexOf('=');
      const isValidLine = equalsPosition !== -1;
  
      if (!isValidLine) {
        return;
      }
  
      const keyPosition = equalsPosition - 1;
      const valuePosition = equalsPosition + 1;
  
      result[lineTokens[keyPosition]] = lineTokens[valuePosition];
    });
  } catch (error) {
    //
  } finally {
    return result;
  }
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы