用对象的值替换 url 参数

replace url params with values of an object

我有这样一个对象:

let data = {
    url: "https://test.ir/apps/:type/:id/",
    params: {
        id: "com.farsitel.bazaar",
        type: "xyz",
    },
    query: {
        ref: "direct",
        l: "en",
    },
};

我想将 url 中的 :type 和 :id 替换为来自 params 对象的等效键。 javascript 中的最佳解决方案是什么?

你能用 String.replace 吗?

const data = {
   url: "https://test.ir/apps/:type/:id/",
   params: {
      id: "com.farsitel.bazaar",
      type: "xyz",
   },
   query: {
      ref: "direct",
      l: "en",
   },
}

const url = data.url.replace(":type", data.params.type).replace(":id", data.params.id);

console.log(url)

解决方案基于匹配params正则表达式url的值,然后更新该密钥。

输入时:https://test.ir/apps/:type/:id/

输出时:https://test.ir/apps/xyz/com.farsitel.bazaar/

let data = {
    url: "https://test.ir/apps/:type/:id/",
    params: {
        id: "com.farsitel.bazaar",
        type: "xyz",
    },
    query: {
        ref: "direct",
        l: "en",
    },
};

let new_url = data.url.replace(/:(\w+)/g, (match, key) => data.params[key] || match);

data.url = new_url;

console.log(data);