Javascript-将值匹配(和替换)到数组array

时间:2018-12-20 09:06:16

标签: javascript replace match

通过Ajax请求(GET)解析值后,我需要将其替换为其他值->即对应于同一国家/地区代码的多个邮政编码(“ 1991,1282,6456”:“爱达荷州”,等等)< / p>

这是我到目前为止所做的:

$mapCodes = {
  '1991': 'Idaho',
  '1282': 'Idaho',
  '5555': 'Kentucky',
  '7777': 'Kentucky '
}
var region = value.groupid.replace(/7777|5555|1282|1991/, function(matched) {
  return $mapCodes[matched];
});
console.log(region);

这可行,但是我宁愿避免将$ mapCodes变量设置为一长串重复的值。

我需要像array这样的数组来匹配(然后替换)

$mapCodes = {
'1991,1282' : 'Idaho',
'7777,5555' : 'Kentycky'
}

2 个答案:

答案 0 :(得分:3)

您需要使用数组,其中元素是$ mapCodes的键:

{
  "Idaho":[1991,1282]
}

这是演示:

$mapCodes = {
  "Idaho":['1991','1282'],
  "Kentucky":['5555','7777']
}
var test="1991 7777 1282";  /// input string
var region = test; // result string
for(let key in $mapCodes){
  let a =$mapCodes[key];
  for(let i=0; i<a.length; i++) {
    region = region.replace(a[i],key);
  }
}
console.log(region);

答案 1 :(得分:0)

imudin07已经使用正确易读的代码正确回答了,但是出于好奇,这是另一种可能性,使用现代JS语法和数组方法mapreducesome

var mapCodes = {
  "Idaho": ['1991', '1282'],
  "Kentucky": ['5555', '7777']
};
var input = "1991 7777 1282 9999";
var result = input.split(' ').map((inputCode) => (
  Object.keys(mapCodes).reduce((matchingState, curState) => (
    matchingState || (mapCodes[curState].some((code) => code === inputCode) ? curState : false)
  ), false) || inputCode
)).join(' ');
console.log(result);