Задать вопрос

Одновременная замена?

Суть проблемы проще всего описать на примере с цифрами. Представим, что есть ряд цифр 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, но при этом замены не влияли на последующие замены)

Как такое хотя бы называется, чтобы можно было загуглить? :)
  • Вопрос задан
  • 236 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
mlnkv
@mlnkv
JavaScript Developer
var data = {
  1: 3,
  3: 2,
  2: 4
}
var regex = new RegExp('([' + Object.keys(data).join("") + '])', "g");
var str = "0, 1, 2, 3, 4, 5, 6, 7, 8, 9";

str = str.replace(regex, function(n) {
  return data[n];
});

console.log(str); // 0, 3, 4, 2, 4, 5, 6, 7, 8, 9
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@tplus
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 в функции для замены) заменить.
Ответ написан
cjbars
@cjbars
Мое предположение.
Идти по шагам, и записывать в новый массив только измененную цифру

например:
создали пустой массив равный исходному
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 на числи из исходного массива.

Ну это в качестве бреда :-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы