有没有更好的方法来链接String#replace方法



我知道regex是可能的,但我想同时编辑很多东西。最小化链接。它只是在代码上看起来不太好。

例如,
假设字母表是混乱的
A将是E
B将是H
E将是D

如何使用最少的函数将ABE更改为EHD?为了清楚起见,我有一个物体,上面有这个混乱的字母表。

TL;DR:

批量更新字符串中字母到指定对应字母的最佳方式?

您可以编写一些逻辑,将字符串拆分为一个字符数组,然后使用map()比较单独的值,并在需要时进行替换。然后将数组连接回字符串。

const original = "ABE";
const splitted = original.split("");
const replaced = splitted.map((letter) => {
if(letter === "A") return "E"
if(letter === "B") return "H"
if(letter === "E") return "D"
return letter
});
console.log(replaced.join(""));

最简单的方法是使用正则表达式,但也可以将其与替换函数配对:

const substitutions = {
"A": "E",
"B": "H",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const sub = substitutions[char] ?? char;

return sub;
});
}
console.log(transform("HELLO WORLD!"));
console.log(transform("BEAUTIFUL!"));
console.log(transform("BOATS ARE EXCELLENT 👍"));

正则表达式/./g只匹配每一个字符,然后replacer函数检查它是否存在于substitutions中并返回。或者,如果它不存在,由于零合并运算符(??(,它会返回到相同的字符。

这要求您在substitutions中明确指定小写和大写字符。

const substitutions = {
"a": "e",
"A": "E",
"b": "h",
"B": "H",
"e": "d",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const sub = substitutions[char] ?? char;

return sub;
});
}
console.log(transform("Hello world!"));
console.log(transform("Beautiful!"));
console.log(transform("Boats Are Excellent 👍"));

如果您总是希望替换与大小写(a -> eA -> E(匹配,并且不希望substitutions中有额外的条目,那么您可以检查字符的大小写并转换替换:

const substitutions = {
"A": "E",
"B": "H",
"E": "D"
};
function transform(input) {
return input.replace(/./g, char => {
const upperChar = char.toLocaleUpperCase();

if (!(upperChar in substitutions))
return char;

const isUpper = char === upperChar;
const sub = substitutions[upperChar];
if (isUpper) 
return sub.toLocaleUpperCase();
return sub.toLocaleLowerCase();    
});
}
console.log(transform("Hello world!"));
console.log(transform("Beautiful!"));
console.log(transform("Boats Are Excellent 👍"));

最新更新