Мне нужно знать, как заменить urltext объектом с помощью javavscript.
Если URL-адрес — www.xyz.com/en/all-services-from-mal-to-sin/details?amount=1000&scy=SGD, а если lang — это en, то замените URL-адрес соответствующим ключом объекта, а если lang — это zh, то замените URL-адрес соответствующим значением объекта.
ExpectedOutput:
if url is
www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD
=> output :www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD
if url is
www.xyz.com/zh/all-services-from-mal-to-sin?amount=1000&scy=SGD
=> output: www.xyz.com/zh/hui-zhi-phi-tho-zmal-zhi-stin?amount=1000&scy=SG
if url is
www.xyz.com/en/hui-zhi-phi-tho-zmal-zhi-stin?amount=1000&scy=SG
=> output: www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD
var obj1 = {
"transfer-services": "xi-hou-zhi-n",
"about-info": "zhi-zhu",
"contact": "zhi-phi",
"all-services-from": "hui-zhi-phi-tho",
"to": "zhi",
"sin": "stin",
"mal": "zmal"
};
function transformURL(url,value) {
let [base, lang, segment, ...rest] = url.split('/');
lang=value;
if (obj1.hasOwnProperty(segment)) {
segment = obj1[segment];
} else {
Object.entries(obj1).forEach(([key, val]) => {
if (val == segment) {segment = key};
});
}
return [base, lang, segment, ...rest].join('/');
}
console.info(transformURL('www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD', "zh"));
@RAVIPATEL спасибо за ответ, упомянутый в ожидаемом результате
Это настолько специфично, что я бы просто использовал if условные предложения или switch. Ты делаешь это сложнее, чем нужно. String.replace().
@StackSlave спасибо за ответ, извинения, обновленный код



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


Это может помочь вам.
function transformURL(url,value) {
let [base, lang, segment, ...rest] = url.split('/');
lang=value;
var newsegment=segment.split('?')[0]
if (lang= = "zh")
{
newsegment = obj1["all-services-from"]+"-"+obj1["mal"]+"-"+obj1["to"]+"-"+obj1["sin"]+"?"+segment.split('?')[1];
}else{
newsegment = "all-services-from"+"-"+"mal"+"-"+"to"+"-"+"sin"+"?"+segment.split('?')[1];
}
return [base, lang, newsegment, ...rest].join('/');
}
У вас есть сопоставление en с zh, если вы хотите двухстороннее преобразование, вам также нужно обратное сопоставление.
И ваша проверка obj1.hasOwnProperty(segment) и val === segment никогда не будет работать, так как все ключи в вашем объекте являются частичными, ваш сегмент представляет собой комбинацию нескольких ключей, поэтому вам нужно перебрать ключи, проверить, является ли ключ частью сегмента и замените эту часть сегмента.
const enToZh = {
"transfer-services": "xi-hou-zhi-n",
"about-info": "zhi-zhu",
"contact": "zhi-phi",
"all-services-from": "hui-zhi-phi-tho",
"to": "zhi",
"sin": "stin",
"mal": "zmal"
};
const zhToEn = Object.keys(enToZh).reduce((a, c) => (
{ ...a, [enToZh[c]]: c }
), {});
function transformURL(url) {
let [base, lang, segment, ...rest] = url.split('/');
const obj = lang === 'en' ? zhToEn : enToZh;
Object.keys(obj).forEach(key => {
segment = segment.replace(key, obj[key]);
});
return [base, lang, segment, ...rest].join('/');
}
console.info(transformURL('www.xyz.com/zh/all-services-from-mal-to-sin/details?amount=1000&scy=SGD'));
он работает для двух языков, но не работает для многоязычного сценария, не могли бы вы помочь, застрял в коде. stackoverflow.com/questions/57138754/…
Каким должен быть ваш выходной URL?