我有这段代码,它应该返回"BLABLABLALBLA CAT COOL DOG CAT"
,但它现在返回"BLABLABLALBLA C COOL D P C"
...
代码中的错误在String.prototype.replace()方法的回调中。
目前我只是返回match
,这是已被replace方法过滤的值。在回调中,我想检查abbreviations
数组中是否存在D,P或C,如果它们确实存在则脚本应该打印出缩写,否则它不应该打印出来,因为我不想要显示任何少于3个字符的单词,如果它们不存在于缩写数组中。
replace()方法的回调应该返回dog for d,cat for c和for p应该只返回一个空字符串(""),因为p不存在于{{1数组。
请参阅附件代码:
abbreviations

答案 0 :(得分:1)
您从错误的函数(forEach
回调)返回替换。您需要让forEach
更新外部变量,然后返回该变量,或者只需使用.find
:
const abbreviations = [
{abbreviation: "d", expansion: "dog"},
{abbreviation: "c", expansion: "cat"},
{abbreviation: "h", expansion: "horse"}
];
const testStringOriginal = " blablablalbla, / c coOL @ d p 233c ";
const filteredString = testStringOriginal
.replace(/\b\w{1,3}\b/g, match => {
let abbr = abbreviations.find(x => x.abbreviation === match);
return abbr ? abbr.expansion : '';
});
console.log("CONVERTED STRING:" + filteredString);