Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript使用对象更改urlpath_Javascript_Jquery_Arrays_Object - Fatal编程技术网

使用javascript使用对象更改urlpath

使用javascript使用对象更改urlpath,javascript,jquery,arrays,object,Javascript,Jquery,Arrays,Object,我需要知道如何使用javavscript用对象替换urltext 如果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=S

我需要知道如何使用javavscript用对象替换urltext

如果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
这可能对你有帮助

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.log(transformURL('www.xyz.com/zh/all-services-from-mal-to-sin/details?amount=1000&scy=SGD'));

您的输出url应该是什么?@RAVIPATEL感谢您的回复,在预期输出中提到了它非常具体,我只会使用
if
条件或
开关。你让事情变得更难了
String.replace()
@StackSlave感谢您的回复、道歉、更新的代码它适用于两种语言,但不适用于多语言场景,请您帮忙,代码卡住了。
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.log(transformURL('www.xyz.com/zh/all-services-from-mal-to-sin/details?amount=1000&scy=SGD'));