Заменить строку значениями массива в javascript

#javascript #arrays #string #replace

Вопрос:

Я пытаюсь заменить значения строки значениями массива в javascript, объединив значения строки со значениями массива. например:

моя строка

 var str = 'a*b-ab';
var arrayElement = [['a', 'class 1'], ['b', 'class 12'],['ab', 'class 15'],['ac', 'class 2']]
 

Теперь строка (str) имеет a, b, ab, а массив имеет a, b, ab, ac. нам нужно объединить строковые значения, такие как a, b и ab, и получить их описание из массива. и мой вывод должен быть

 class 1 * class 12 - class 15
 

есть ли способ сделать это в javascript. пожалуйста, помогите.

Ответ №1:

Сначала вы можете преобразовать свою arrayElement строку в карту, чтобы вы могли легко находить значения класса из ваших строк a, b, ab и т. Д. Затем вы можете использовать .replace() с регулярным выражением w для сопоставления элементов word (т. Е. неоператоров) в вашей строке. Затем вы можете использовать функцию в качестве второго аргумента .replace() для захвата совпадающих букв и использовать карту, которую мы создали, для захвата связанного с ней класса:

 const str = 'a*b-ab';
const arrayElement = [['a', 'class 1'], ['b', 'class 12'],['ab', 'class 15'],['ac', 'class 2']];

const lookup = new Map(arrayElement);
const res = str.replace(/w /g, m => ` ${lookup.get(m)} `).trim();
console.log(res); 

Если вам нужна лучшая поддержка браузера, это можно переписать в ES5 следующим образом, который поддерживается многими браузерами, включая IE11:

 var str = 'a*b-ab';
var arrayElement = [['a', 'class 1'], ['b', 'class 12'],['ab', 'class 15'],['ac', 'class 2']];

var lookup = arrayElement.reduce(function(acc, arr) {
  acc[arr[0]] = arr[1];
  return acc;
}, {});

var res = str.replace(/w /g, function(m) {
  return " "   lookup[m]   " ";
}).trim();
console.log(res); 

Комментарии:

1. Привет, Ник Парсонс, это так хорошо работает в Chrome, но выдает синтаксическую ошибку в IE 11. не могли бы вы рассказать мне, как заставить это работать в IE 11. спасибо

2. @kavya Я предоставил версию в ES5, которая будет работать для IE11, она находится в скрытом фрагменте кода