如何替换动态未知的动态变量

时间:2019-09-10 07:03:24

标签: javascript vue.js vuejs2

我有一个.js文件,其配置结构如下。

genGetLocations:{
   data_url:'restaurants/{var1}/tables/{var2},
}

这是一个例子。有些配置可能具有data_url,其中的data_url具有两个以上的动态变量。然后在.vue文件中,在获取到data_url之后,我将有两个ID,必须将其替换为var1和var2,这样我才能拥有最终的REST API URL来提出请求。

问题:我不知道每个data_url将有多少个变量以及它们将在data_url中放置的位置。因此,在.vue文件中,当我拥有ID时,我想在data_url中替换它们。

3 个答案:

答案 0 :(得分:2)

根据ID是数组还是对象,可以执行以下操作之一:

const data = 'restaurants/{var1}/tables/{var2}';
const idsArray = [101, 102];

console.log(
  data.replace(/\{var(\d+)\}/g, (substr, idx) => idsArray[parseInt(idx) - 1])
);

const data = 'restaurants/{var1}/tables/{var2}';
const idsObj = {
  var1: 101,
  var2: 102
};

console.log(
  data.replace(/\{(var\d+)\}/g, (substr, key) => idsObj[key])
);

如果您希望键是任意的:

const data = 'restaurants/{foo}/tables/{bar}';
const idsObj = {
  foo: 101,
  bar: 102
};

console.log(
  data.replace(/\{(.*?)\}/g, (substr, key) => idsObj[key])
);

答案 1 :(得分:1)

这正在寻找URL中的每个{}。因此可能是{var1}{string2}左右。

尝试一下:

var info = {"genGetLocations":{
   "data_url" : "restaurants/{var1}/tables/{var2}"
}};

var ids = ["test1", "test2", "test3"];
var regexp = /\{.*?\}/g;
var results = info.genGetLocations.data_url.match(regexp);
var replacedString = info.genGetLocations.data_url;
results.forEach(function(result, index) {
  replacedString = replacedString.replace(new RegExp(result,"g"), ids[index]); 
});

console.log(replacedString);

答案 2 :(得分:0)

也许您可以尝试一下

sleep ( int $seconds ) : int