помогите разобратся плиззззз в JS

Рейтинг: -3Ответов: 1Опубликовано: 23.07.2023

Никак не могу понять, как сделать привязку к поиску текста в массивах (типа find(), includes()...), чтоб потом вытащить из строки число с помощью parseInt(). Надо из функции, которая содержит число, написанное прописью (0-999). Получить само число...

function wordsToNumbers(){
    let a = ['0ноль', '1один', '2два', '3три', '4четыре', '5пять', '6шесть', '7семь', '8восемь', '9девять'];
    let b = ['11одиннадцать', '12двенадцать', '13тринадцать', '14четырнадцать', '15пятнадцать', '16шестнадцать', '17семнадцать', '18восемнадцать', '19девятнадцать'];
    let c = ['10десять', '20двадцать', '30тридцать', '40сорок', '50пятьдесят', '60шестьдесят', '70семьдесят', '80восемьдесят', '90девяносто'];
    let d = ['100сто', '200двести', '300триста', '400четыриста', '500пятсот', '600шестсот', '700семсот', '800восемсот', '900девятсот'];
    let x = a.find('один');
    let result = parseInt(x);
    console.log(x);
}

wordsToNumbers('один');

второй день ломаю голову-результата 0((((

Ответы

▲ 0Принят

В find у элемента массива удаляются цифры, а после происходит сверка с введённым словом, в котором все буквы принудительно переведены в нижний регистр:

let a = ['0ноль', '1один', '2два', '3три', '4четыре', '5пять', '6шесть', '7семь', '8восемь', '9девять'];
let b = ['11одиннадцать', '12двенадцать', '13тринадцать', '14четырнадцать', '15пятнадцать', '16шестнадцать', '17семнадцать', '18восемнадцать', '19девятнадцать'];
let c = ['10десять', '20двадцать', '30тридцать', '40сорок', '50пятьдесят', '60шестьдесят', '70семьдесят', '80восемьдесят', '90девяносто'];
let d = ['100сто', '200двести', '300триста', '400четыриста', '500пятсот', '600шестсот', '700семсот', '800восемсот', '900девятсот'];
let all = [...a, ...b, ...c, ...d]; //Все значения всех массивов

function wordsToNumbers(word) {
  let x = all.find(numberWithWord => numberWithWord.replace(/[0-9]/g,"") === word.toLowerCase());
  let result = parseInt(x);
  console.log(result);
}

wordsToNumbers('ОдиН')
wordsToNumbers('сто')

Поиск из нескольких слов с проверкой на валидность данных:

let a = ['0ноль', '1один', '2два', '3три', '4четыре', '5пять', '6шесть', '7семь', '8восемь', '9девять'];
let b = ['11одиннадцать', '12двенадцать', '13тринадцать', '14четырнадцать', '15пятнадцать', '16шестнадцать', '17семнадцать', '18восемнадцать', '19девятнадцать'];
let c = ['10десять', '20двадцать', '30тридцать', '40сорок', '50пятьдесят', '60шестьдесят', '70семьдесят', '80восемьдесят', '90девяносто'];
let d = ['100сто', '200двести', '300триста', '400четыреста', '500пятьсот', '600шестьсот', '700семьсот', '800восемьсот', '900девятьсот'];
let all = [...a, ...b, ...c, ...d]; //Все значения всех массивов

function wordsToNumbers(words) {

  let wordsArr = words.split(' ');
  let result = 0;

  for (let i = 0; i < wordsArr.length; i++) {

    let x = all.find(numberWithWord => numberWithWord.replace(/[0-9]/g,"") === wordsArr[i].toLowerCase());
    let number = parseInt(x);

    if (x === undefined || (result !== 0 && String(number).length >= String(result).length)) {
      result = 'Ошибка в запросе'
      break;
    }

    result += number;
  }
  
  console.log(result);
}

wordsToNumbers('четырЕСТА пятнадцать')
wordsToNumbers('Двести сорок енот')
wordsToNumbers('пятьсот семьсот восемьсот')
wordsToNumbers('сто')