Javascript 数组reduce未返回预期结果

Javascript 数组reduce未返回预期结果,javascript,Javascript,我正在开发一个搜索函数,它通过数组过滤器,然后通过reduce将正确的字符串相互匹配,但在获得预期结果时遇到了一些困难 我有一个常用短语的枚举,我想映射到它们的值,例如,如果搜索了Amer,它也应该匹配American。为了实现这一点,我设置了一个带有reduce值的对象,该值应添加到搜索字符串中,例如,如果API数据或搜索数据包含U Street African Amer,则应在返回中将其转换为U Street African Amer american。如果未找到任何映射数据,则应传回原始函

我正在开发一个搜索函数,它通过数组过滤器,然后通过reduce将正确的字符串相互匹配,但在获得预期结果时遇到了一些困难

我有一个常用短语的枚举,我想映射到它们的值,例如,如果搜索了
Amer
,它也应该匹配
American
。为了实现这一点,我设置了一个带有reduce值的对象,该值应添加到搜索字符串中,例如,如果API数据或搜索数据包含
U Street African Amer
,则应在返回中将其转换为
U Street African Amer american
。如果未找到任何映射数据,则应传回原始函数参数

const首字母缩略词枚举={
山:"山",,
阿默尔:“美国人”,
PL:“地点”,
UDC:“哥伦比亚特区大学”,
非盟:“美国大学”,
大道:'大道',
美利坚天主教大学:
诺玛:“马塞库塞茨大道以北”,
GMU:“乔治·梅森大学”,
弗吉尼亚理工大学,
UVA:“弗吉尼亚大学”,
雷根:“DCA”,
街",,
西南:西南,
SQ:‘正方形’,
宾夕法尼亚州:“宾夕法尼亚州”,
};
函数convertStationAcronym(stationName){
返回Object.keys(首字母缩略词enum).reduce((上一个,当前)=>{
if(stationName.toLowerCase().includes(current.toLowerCase())){
console.log('触发匹配',当前)
return stationName.concat(`${acronymEnum[current]}`).toLowerCase();
}否则{
返回previous.toLowerCase();
}
}, '');
}

console.log(convertStationAcronym('U Street African Amer'))
您将希望以
stationName
作为初始值启动
reduce
,然后始终连接到
previous
而不是原始
stationName
值:

const首字母缩略词枚举={
山:"山",,
阿默尔:“美国人”,
PL:“地点”,
UDC:“哥伦比亚特区大学”,
非盟:“美国大学”,
大道:'大道',
美利坚天主教大学:
诺玛:“马塞库塞茨大道以北”,
GMU:“乔治·梅森大学”,
弗吉尼亚理工大学,
UVA:“弗吉尼亚大学”,
雷根:“DCA”,
街",,
西南:西南,
SQ:‘正方形’,
宾夕法尼亚州:“宾夕法尼亚州”,
};
函数convertStationAcronym(stationName){
返回Object.keys(首字母缩略词enum).reduce((上一个,currentKey)=>{
const re=new RegExp(“\\b”+currentKey+“\\b”,“i”);//TODO:转义特殊字符
if(重新测试(站点名称)){
console.log('trigger the match',currentKey)
返回previous.concat(“”,首字母缩略词[currentKey]);
//           ^^^^^^^^
}否则{
返回上一个;
}
},stationName)。toLowerCase();
//   ^^^^^^^^^^^
}

console.log(convertStationAcronym('U Street African Amer'))
您将希望以
stationName
作为初始值启动
reduce
,然后始终连接到
previous
而不是原始
stationName
值:

const首字母缩略词枚举={
山:"山",,
阿默尔:“美国人”,
PL:“地点”,
UDC:“哥伦比亚特区大学”,
非盟:“美国大学”,
大道:'大道',
美利坚天主教大学:
诺玛:“马塞库塞茨大道以北”,
GMU:“乔治·梅森大学”,
弗吉尼亚理工大学,
UVA:“弗吉尼亚大学”,
雷根:“DCA”,
街",,
西南:西南,
SQ:‘正方形’,
宾夕法尼亚州:“宾夕法尼亚州”,
};
函数convertStationAcronym(stationName){
返回Object.keys(首字母缩略词enum).reduce((上一个,currentKey)=>{
const re=new RegExp(“\\b”+currentKey+“\\b”,“i”);//TODO:转义特殊字符
if(重新测试(站点名称)){
console.log('trigger the match',currentKey)
返回previous.concat(“”,首字母缩略词[currentKey]);
//           ^^^^^^^^
}否则{
返回上一个;
}
},stationName)。toLowerCase();
//   ^^^^^^^^^^^
}

console.log(convertStationAcronym('U Street African Amer'))
该问题的替代解决方案是将输入字符串划分为一个数组,对于数组中的每个元素,我们将在acronymEnum对象中找到条目。如果输入字符串的长度较短,这种方法将更有效。
const首字母缩略词枚举={
山:"山",,
阿默尔:“美国人”,
PL:“地点”,
UDC:“哥伦比亚特区大学”,
非盟:“美国大学”,
大道:'大道',
美利坚天主教大学:
诺玛:“马塞库塞茨大道以北”,
GMU:“乔治·梅森大学”,
弗吉尼亚理工大学,
UVA:“弗吉尼亚大学”,
雷根:“DCA”,
街",,
西南:西南,
SQ:‘正方形’,
宾夕法尼亚州:“宾夕法尼亚州”,
};
函数convertStationAcronym(stationName){
让stationNameArray=stationName.split(“”);
让结果=stationNameArray.map((项)=>{
返回首字母缩略词枚举[item.toUpperCase()]
?首字母缩略词枚举[item.toUpperCase()]
:项目
})
返回结果。join(“”);
}

console.log(convertStationAcronym('U Street African Amer'))
该问题的替代解决方案是将输入字符串划分为一个数组,对于数组中的每个元素,我们将在acronymEnum对象中找到条目。如果输入字符串的长度较短,这种方法将更有效。
const首字母缩略词枚举={
山:"山",,
阿默尔:“美国人”,
PL:“地点”,
UDC:“哥伦比亚特区大学”,
非盟:“美国大学”,
大道:'大道',
美利坚天主教大学:
诺玛:“马塞库塞茨大道以北”,
GMU:“乔治·梅森大学”,
弗吉尼亚理工大学,
UVA:“弗吉尼亚大学”,
雷根:“DCA”,
街",,
西南:西南,
SQ:‘正方形’,
宾夕法尼亚州:“宾夕法尼亚州”,
};
函数convertStationAcronym(stationName){
让stationNameArray=stationName.split(“”);
让结果=stationNameArray.map((项)=>{
返回首字母缩略词枚举[item.toUpperCase()]