Конвертировать индуистско-арабские цифры в английские

1

Внутри массива есть не английский номер в качестве строки. Я хочу преобразовать на английский язык и поместить его в логику и выполнить операцию строки шаблона для каждого div.

Вот пример моего кода

const bigdata = [{img:'http://anything/com/123.png',title:'डेंजर ऑफर', inv:'१७५०'}] //Here १७५० = 1750 NOTE: I have multiple objects like this in my code

let template='';
bigdata.forEach(offers => {
function offer_tag(){
    if((HERE I WANT CONVERTED NUMBER)<15000){
       return '<span class="badge badge-warning">नवीन</span>'
    }
}

//This offer tag will be used in template string

У меня есть код преобразования из jQuery, но я очень смущен, как я могу использовать этот код для преобразования номера строки на английский номер и использования внутри оператора if. Вот код jQuery: (я скопировал с JavaScript - заменил на английский номер)

    var numbers = {
      '०': 0,
      '१': 1,
      '२': 2,
      '३': 3,
      '४': 4,
      '५': 5,
      '६': 6,
      '७': 7,
      '८': 8,
      '९': 9
    };

    function replaceNumbers(input) {
      var output = [];
      for (var i = 0; i < input.length; ++i) {
        if (numbers.hasOwnProperty(input[i])) {
          output.push(numbers[input[i]]);
        } else {
          output.push(input[i]);
        }
      }
      return output.join('');
    }

    document.getElementById('r').textContent = replaceNumbers('१७५०');
  • 0
    это вопрос о преобразовании числа или об итерациях по массиву объектов и применении некоторой логики после преобразования в число? куда должен идти результат, во втором случае? пожалуйста, добавьте часть HTML, чтобы проиллюстрировать проблему.
  • 1
    Как правило, вы можете просто использовать if (+replaceNumbers(offers.inv) < 15000) { однако есть несколько проблем. Прежде всего, данный код выглядит очень странно, почему вы объявляете функцию внутри функции стрелки для forEach (оставшийся код или закрытие } не даны, поэтому я не могу сказать)? Во-вторых, replaceNumbers просто заменяет, и обработка ошибок не производится, если строка содержит нечисловые символы, например "१७hello५०" . И последнее, но не менее, replaceNumbers намного короче, чтобы писать с помощью const replaceNumbers = s => s.replace(/[०१२३४५६७८९]/g, m => numbers[m]); ,
Теги:
ecmascript-6
arrays
data-conversion

2 ответа

1

Вы можете создавать новые объекты с преобразованными свойствами, если это возможно.

function replaceNumbers(input) {
    var numbers = { '०': '0', '१': '1', '२': '2', '३': '3', '४': '4', '५': '5', '६': '6', '७': '7', '८': '8', '९': '9' };
    return Array.from(input, c => numbers[c] || c).join('');
}

const
    bigdata = [{img:'http://anything/com/123.png',title:'डेंजर ऑफर', inv:'१७५०'}],
    converted = bigdata.map(o => Object.assign(...Object.entries(o).map(([k, v]) => ({ [k]: replaceNumbers(v) }))))

console.log(converted);
  • 0
    Я думаю, что это здорово, но я также думаю, что исходный вопрос нуждался в «целочисленной» версии числа, а не просто в переведенной строке. Я думаю, что вы можете просто передать свой текущий результат parseInt() . Если вы обновите свой ответ, мой будет лишним.
0

Код у вас уже очень близок. Пытаться:

function parseIntHindi(text, radix){
  var numbers = { '०': 0, '१': 1, '२': 2, '३': 3, '४': 4, '५': 5, '६': 6, '७': 7, '८': 8, '९': 9 };

  function replaceNumbers(input) {
    var output = [];
    for (var i = 0; i < input.length; ++i) {
      if (numbers.hasOwnProperty(input[i])) {
        output.push(numbers[input[i]]);
      } else {
        output.push(input[i]);
      }
    }
    return output.join('');
  }

  return parseInt(replaceNumbers(text), radix)
}

console.log(parseIntHindi("१७५०"));
console.log(parseIntHindi("१७५०") +1);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню