Javascript - сопоставить (и заменить) значение с массивом массива - PullRequest
0 голосов
/ 20 декабря 2018

После анализа значений с помощью запроса Ajax (GET) мне нужно заменить их другими значениями -> т.е. несколькими почтовыми кодами, соответствующими одному и тому же коду страны («1991,1282,6456»: «Айдахо» и т. Д.)

Это то, что я сделал до сих пор:

$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 в виде повторения длинного списка значений.

Мне нужно что-то вроде и массивмассив для сопоставления (и затем замена)

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

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

imudin07 уже ответил правильно и с более легким для чтения кодом, но просто из любопытства, есть еще одна возможность, используя современный синтаксис JS и методы массива map , сокращение и некоторые .

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);
0 голосов
/ 20 декабря 2018

Вам необходимо использовать массив, элементами которого являются ключи $ 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);
...