Суть проблемы проще всего описать на примере с цифрами. Представим, что есть ряд цифр 1,2,3,4,5.
И необходимо заменять 1 на 3, 3 на 2, 2 на 4. Если заменять обычным способом сначала в три шага, то в конце будет
1,2,3,4,5 (1 на 3) = 3,2,3,4,5 (3 на 2) = 2, 2, 2, 4, 5 (2 на 4) = 4, 4, 4, 4, 5. Н
Необходимо заменить все это одновременно, чтобы прошлый шаг замены не влиял на следующий
Тогда результат был бы 3, 4, 2, 4, 5 (заменили 1 на 3, 3 на 2, 2 на 4, но при этом замены не влияли на последующие замены)
Как такое хотя бы называется, чтобы можно было загуглить? :)
var a = '1,2,3,4,5';
b = a.replace(/\d/g, function(n){if (n == '1') {return 3} else if (n == '3') {return 2} else if (n == '2') {return '4'} else {return n}});
>> "3,4,2,4,5"
Воспользуйтесь функцией для замены. Функцию, естественно, лучше оформить красивее :)
Для замены через регулярное выражение берём каждый одиночный символ из набора цифр, а из функции (второй аргумент replace) получаем значение, на которое нужно найденный элемент (аргумент n в функции для замены) заменить.
А как-нибудь можно с массивом связать? У меня есть массив из 1000 подобных чисел. и есть другой массив, где тоже 1000 чисел, но надо заменить. И замену надо произвести в огромной строке на тысячу символов. А то данный способ тоже не применить.
tplus: есть первый массив 1,2,3,4. есть второй массив 2,3,1,4
Соответственно надо поменять 1 на 2, 2 на 3, 3 на 1, 4 на 4. И чтобы прошлые замены не влияли на будущие.
Но заменять надо в строке, а не в другов массиве. Допустим есть строка "1231231298412341". В ней надо так заменить
Если у вас просто 2 массива: один это набор от 0-9, а второй такой же по длине (10), где соответствия на замену им, Сергей Мельников в комментариях написал то что надо.
Мое предположение.
Идти по шагам, и записывать в новый массив только измененную цифру
например:
создали пустой массив равный исходному
var out=[x, x, x, x, x]
1 шаг
взяли 1, 2, 3, 4, 5 надо заменить 1 на 3, заменили сохранили
out=[3, x, x, x, x]
2 шаг
взяли 1, 2, 3, 4, 5 надо заменить 3 на 2, заменили сохранили
out=[3, x, 2, x, x]
.....
потом прошлись по получившемуся массиву и заменили x на числи из исходного массива.
Проблема в том, что замену нужно производить в контенте, а не в массиве. Если я буду сохранять все в массив, то в конце непонятно, что с ним делать. Ведь надо будет снова заменить в контенте
Хотелось бы что-то типа строка = str_replace_all(входной_массив_что_менять,входной_массив_на_что_менять, строка)