我正在研究通过数组过滤器传递的搜索功能,然后进行归约操作以使正确的字符串彼此匹配,但是在获得预期结果时遇到了一些困难。
我有一个要映射到其值的常用短语的枚举,例如,如果搜索Amer
,它也应该与American
相匹配。为此,我为对象设置了一些带有减少值的值,该值应将该值添加到搜索字符串中,例如,如果API数据或搜索数据包含U Street African Amer
,则应将其转换为{{1 }}。如果找不到任何映射的数据,则应传回原始函数参数。
u street african amer american
我遇到的问题是,它返回的是未定义的,或者仅根据返回到函数的内容在返回的语句中添加一个映射的短语。任何帮助,将不胜感激!
答案 0 :(得分:2)
您将需要以reduce
作为初始值来开始stationName
,然后始终将其串联为previous
而不是原始的stationName
值:
const acronymEnum = {
MT: 'Mountain',
AMER: 'American',
PL: 'Place',
UDC: 'Univeristy of the District of Columbia',
AU: 'American University',
AVE: 'Avenue',
CUA: 'Catholic University of America',
NOMA: 'North of Massechusets Avenue',
GMU: 'George Mason University',
VT: 'Virginia Tech',
UVA: 'University of Virginia',
RAEGAN: 'DCA',
ST: 'Street',
SW: 'South West',
SQ: 'Square',
PENN: 'Pennsylvania',
};
function convertStationAcronym(stationName) {
return Object.keys(acronymEnum).reduce((previous, currentKey) => {
const re = new RegExp("\\b" + currentKey + "\\b", "i"); // TODO: escape special characters
if (re.test(stationName)) {
console.log('trigger the match', currentKey)
return previous.concat(' ', acronymEnum[currentKey]);
// ^^^^^^^^
} else {
return previous;
}
}, stationName).toLowerCase();
// ^^^^^^^^^^^
}
console.log(convertStationAcronym('U Street African Amer'))
答案 1 :(得分:1)
该问题的另一种解决方案是将输入字符串分成一个数组,对于数组中的每个元素,我们将在acronymEnum Object中找到该条目。如果输入字符串的长度较小,则此方法将更有效。
const acronymEnum = {
MT: 'Mountain',
AMER: 'American',
PL: 'Place',
UDC: 'Univeristy of the District of Columbia',
AU: 'American University',
AVE: 'Avenue',
CUA: 'Catholic University of America',
NOMA: 'North of Massechusets Avenue',
GMU: 'George Mason University',
VT: 'Virginia Tech',
UVA: 'University of Virginia',
RAEGAN: 'DCA',
ST: 'Street',
SW: 'South West',
SQ: 'Square',
PENN: 'Pennsylvania',
};
function convertStationAcronym(stationName) {
let stationNameArray = stationName.split(" ");
let result = stationNameArray.map((item)=> {
return acronymEnum[item.toUpperCase()]
? acronymEnum[item.toUpperCase()]
:item
})
return result.join(" ");
}
console.log(convertStationAcronym('U Street African Amer'))