Изменение URL-адреса с помощью объекта с помощью javascript

Мне нужно знать, как заменить 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"));

Каким должен быть ваш выходной URL?

Ravi 12.07.2019 08:25

@RAVIPATEL спасибо за ответ, упомянутый в ожидаемом результате

Senthil 12.07.2019 08:30

Это настолько специфично, что я бы просто использовал if условные предложения или switch. Ты делаешь это сложнее, чем нужно. String.replace().

StackSlave 12.07.2019 08:32

@StackSlave спасибо за ответ, извинения, обновленный код

Senthil 12.07.2019 08:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
73
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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/

Ответ принят как подходящий

У вас есть сопоставление 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/…

Senthil 22.07.2019 05:14

Другие вопросы по теме