Я все еще новичок в Javascript, и я не совсем уверен, как это сделать.
Я хочу, чтобы он соответствовал ключевому полю и заменил его своим значением.
const state = {
"NY": "New York"
}
Вы живете в Нью-Йорке к Ты живешь в нью йорке
Список со всеми состояниями будет довольно длинным, поэтому я думаю, что мне придется использовать объекты. Любая помощь будет оценена по достоинству! Заранее спасибо!
РЕДАКТИРОВАТЬ >>>
Большое спасибо тем, кто ответил! Я составил список всех штатов США, Канады и Мексики с их полным названием здесь: https://gist.github.com/PepperAddict/b8c6c80af4a17908fd98378b4375047e
используя предоставленный код, я смог изменить их все на их полное имя.
Спасибо Спасибо спасибо!
You live in ${arrayOfStates['NY']}


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Регулярное выражение не нужно, используйте ключи из объекта state
Object.keys(state).forEach(k => str = str.replace(k, state[k]));
const state = { "NY": "New York" };
var str = "You live in NY";
Object.keys(state).forEach(k => str = str.replace(k, state[k]));
console.info(str);Использование регулярного выражения для замены всего набора совпадений:
const state = { "NY": "New York" };
var str = "You live in NY and again in NY";
Object.keys(state).forEach(k => str = str.replace(new RegExp(`\\b${k}\\b`, 'g'), state[k]));
console.info(str);Ух ты. Это прекрасно сработало !!! У меня было ощущение, что я слишком усложняю это. Спасибо!!!
Единственным недостатком здесь является то, что он будет работать только с одним экземпляром каждого состояния. Если он появляется более одного раза, более поздние экземпляры не будут заменены. Для этого вам понадобится цикл while или регулярное выражение
Я добавил ответ, который показывает решение с регулярным выражением, которое будет обрабатывать все замены.
Мы можем использовать литералы шаблона и сопоставить его, чтобы вернуть массив, с которым вы можете делать то, что хотите.
const state = {
"NY": "New York"
}
console.info(Object.keys(state).map(s => `You live in ${state[s]}`))Если вы планируете сделать это, например, с пользователем
const state = {
"NY": "New York"
}
const user = {
name: "joe",
state: "NY",
liveIn: () => `You live in ${state[user.state]}`
}
console.info(user.liveIn())если вы уверены, что последнее слово - key. Затем вы можете пропустить для каждого, выполнив следующие действия.
const state = {
"NY": "New York"
}
var a = "You live in NY";
b = a.split(" ");
b = b[b.length - 1];
a.replace(b, state[b]);
Console.log(a);
Выход
"You live in New York"
const states = {
"CA": "California",
"NY": "New York"
}
var input = "I'm from CA, thinking of moving to NY but not sure, I still really like CA."
var regexStr = Object.keys(states).join("|")
var statesRgx = new RegExp(`\\b(${regexStr})\\b`, 'g')
console.info(statesRgx)
function stateReplace(str){
return str.replace(statesRgx, val => states[val])
}
console.info(stateReplace(input))
Object.keys(state).forEach(k => str = str.replace(k, state[k]))