у меня есть этот массив
(2) ['beginning=beginner', 'leaves=leave']
и эта строка
its beginner in the sounds leave
который я преобразовал в массив
var words = text.split(' ');
я хочу заменить beginner
на beginning
и leave
на leaves
это могут быть любые динамические слова, но пока у него только два элемента, которые я могу заменить в цикле for. Возможно ли это с помощью метода карты.
this.words.map((words, i) => console.info(words));
Note: Only first instance should get replaced.
Любое решение Спасибо
это правильно с вашим вопросом?
const arrString = ["beginning=beginner", "leaves=leave", "sound=sounds"];
let string = "its beginner in the sounds leave";
arrString.forEach((mapString) => {
const stringArr = mapString.split(" = ");
string = string.replace(stringArr[1], stringArr[0]);
});
console.info("string", string);
// "its beginning in the sound leaves"
Вы можете сделать это и без вложенного цикла, если вы идете на компромисс с пространством.
Вот решение, которое создает объект сопоставления для значений замены и использует методы массива, такие как map()
, forEach()
, join()
, и строковый метод, например split()
const arrString = ["beginning=beginner", "leaves=leave", "sound=sounds"];
let string1 = "its beginner in the sounds leave beginner";
const replaceObj = {};
const arrBreaks = arrString.forEach(x => {
let els = x.split(" = ");
replaceObj[els[1]] = els[0]; });
const ans = string1.split(' ').map((x) => {
if (x in replaceObj) { let val = replaceObj[x]; delete val; return val; }
return x;
}).join(' ');
console.info(ans);
Спасибо, получив эту ошибку:
'delete' cannot be called on an identifier in strict mode. if (x in replaceObj) { let val = replaceObj[x]; delete val; return val; }