#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, она находится в скрытом фрагменте кода