【问题标题】:Changing urlpath with Object using javascript使用 javascript 使用 Object 更改 urlpath
【发布时间】:2019-07-12 06:13:27
【问题描述】:

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

如果url是www.xyz.com/en/all-services-from-mal-to-sin/details?amount=1000&scy=SGD,如果langen,那么用匹配的对象键替换url,如果langzh,那么用匹配的对象值替换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.log(transformURL('www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD', "zh"));

【问题讨论】:

  • 你的输出网址应该是什么?
  • @RAVIATEL 感谢您的回复,在预期输出中提到
  • 它太具体了,我只会使用if 条件句或switch。你让这变得比它需要的更难。 String.replace().
  • @StackSlave 感谢您的回复、道歉、更新代码

标签: javascript jquery arrays object


【解决方案1】:

你的映射是 en 到 zh,如果你想要 2 路转换,你也需要反向映射。

您的检查obj1.hasOwnProperty(segment)val === segment 永远不会起作用,因为您的对象中的所有键都是部分的,您的段是多个键的组合,因此您需要遍历键,检查如果 key 是段的一部分,则替换段的那一部分。

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'));

【讨论】:

【解决方案2】:

这可能会对你有所帮助。

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('/');
}

https://jsfiddle.net/d2tq4w3r/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 2011-10-06
    • 2012-05-19
    • 2010-10-08
    相关资源
    最近更新 更多