Как удалить символ £ из вложенного массива и преобразовать строку в целое число - PullRequest
1 голос
/ 16 мая 2019

У меня есть вложенный массив цен, представляющий собой строку, и я хочу удалить символы £ и преобразовать строку в целое число. Мне нужно убрать знаки £, а также преобразовать их в целое число, чтобы я мог использовать значения в линейном графике chart.js.

Я пытался использовать regex replace для удаления знака £, но я не думаю, что смогу заставить его работать, потому что строки находятся во вложенном массиве. Я не могу найти что-нибудь в сети о замене символов во вложенном массиве. Я еще даже не пытался преобразовать строку в целое число, но мне интересно, можно ли все это обработать за один раз?

это мой вложенный массив с именем linedata

var linedata = [["£14.99,£14.99,£14.99"],["£34.99,£34.99,£34.99"]]

это код, с которым я играл

var re = /£/g; 
var newlinedata = linedata.replace(re, "");

В хромированной консоли ничего не возвращается, и ионный CLI выводит эту ошибку

ОШИБКА в src / app / home / home.page.ts (66,26): ошибка TS2339: свойство «replace» не существует для типа «any []».

Мысли

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Вы можете записать в группу, соответствующую цифре с необязательной десятичной частью после совпадения с £

£(\d+(?:\.\d+)?)
  • £ Совпадение буквально
  • ( Захватывающая группа
    • \d+(?:\.\d+)? Совпадение цифр 1+ с дополнительной частью для совпадения с точкой и цифрами 1+
  • ) Закрыть группу

Regex demo

Вы должны использовать replace в строке вместо массива.

Чтобы превратить вложенный массив со строками в массивы чисел, вы можете использовать map и при замене обратиться к группе захвата, используя $1, которая содержит ваше значение.

Например:

var linedata = [
  ["£14.99,£14.99,£14.99"],
  ["£34.99,£34.99,£34.99"]
].map(ary =>
  ary[0].split(',')
  .map(v => Number(v.replace(/£(\d+(?:\.\d+)?)/g, "$1")))
);

console.log(linedata);

Или, если вы хотите сохранить несколько вложенных массивов, вы можете использовать другую карту.

var linedata = [
  ["£14.99,£14.99,£14.99"],
  ["£34.99,£34.99,£34.99", "£34.99,£34.99,£34.99"]
].map(ary => ary
  .map(s => s.split(',')
    .map(v => Number(v.replace(/£(\d+(?:\.\d+)?)/g, "$1")))
  )
);

console.log(linedata);
0 голосов
/ 16 мая 2019

Это выражение может помочь вам заменить это:

£([0-9.]+,?)

Ключ состоит в том, чтобы добавить все, что вы хотите оставить в группе захвата () и символ фунта за пределами группы, а затем просто заменить его на $1.

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить выражение в regex101.com .

enter image description here

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

Демонстрация JavaScript

const regex = /£([0-9.]+,?)/gm;
const str = `£14.99,£14.99,£14.99
£34.99,£34.99,£34.99`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...