替换字符串数组中的最后一个字母 Javascript
Replace last letters in array of strings Javascript
我需要做的是:
我有一个包含姓氏的字符串数组。其中一些以字母 'i'.
结尾
manLastNames = ["testowski","bucz","idzikowski","gosz"];
我需要创建一个函数来遍历这个字符串数组,如果有一个以 'i' 结尾的元素,我需要将这个 'i' 替换为 'a',否则就让字符串保持原样。
最后我想要另一个数组,其中所有最后的 'i's 都替换为 'a's。
女性姓氏 = ["testowska","bucz","idzikowska","gosz"];
这就是我现在拥有的,但我很确定它在某个时候开始变得糟糕
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = new Array(4);
for (var i=0; i<manLastNames.length; i++) {
var lastName = manLastNames[i];
if (lastName.substr(lastName.length - 1, 1) == 'i') {
lastName = lastName.substr(0, lastName.length - 1) + 'a';
}
}
for (var i=0; i<womanLastNames.length; i++) {
womanLastNames[i] = lastName[i];
}
console.log(womanLastNames);
}
rep();
试试代码:
var manNames = ["testowski","bucz","idzkowski","gosz"];
var womanNames = manNames.map(function(name) {
return name.endsWith("i") ? name.slice(0, -1) + "a" : name;
});
console.log(womanNames)
如果你的解释器支持 ES6,下面是等价的:
names.map((name)=>name.endsWith("i") ? name.slice(0, -1) + "a" : name)
这是解决方案
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames =[];
for (var i=0; i<manLastNames.length; i++) {
var lastName = manLastNames[i];
if (lastName.charAt(lastName.length - 1) == 'i') {
lastName = lastName.substr(0, lastName.length - 1) + 'a';
}
womanLastNames.push(lastName);
}
console.log(womanLastNames);
}
rep();
另一个解决方案是使用像这样的.map
方法,使用回调函数:
var manLastNames = ["testowski","bucz","idzikowski","gosz"];
function mapNames(item){
return item[item.length-1]=='i' ? item.substr(0, item.length-1) + "a" : item;
}
console.log(manLastNames.map(mapNames));
这应该有效:
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = manLastNames;
for(var i=0; i<manLastNames.length;i++){
if(manLastNames[i].charAt(manLastNames[i].length-1)=='i'){
womanLastNames[i]=manLastNames[i].substr(0,womanLastNames[i].length-1)+'a';
}
}
console.log(womanLastNames);
}
rep();
根据您需要的效率,您可以使用正则表达式来完成这两项任务:
var new_name = name.replace(/i$/, 'a');
将用 "a" 替换字符串中的最后一个 "i"(如果存在)
var new_name = name.replace(/i/g, 'a');
会将字符串中的所有 "i" 替换为 "a"。
var names = ["testowski", "bucz", "idzkowski", "gosz"];
console.log("original", names);
var last_i_replaced = names.map(function(name) {
return name.replace(/i$/, 'a');
});
console.log("last 'i' replaced", last_i_replaced);
var all_i_replaced = names.map(function(name) {
return name.replace(/i/g, 'a');
});
console.log("all 'i's replaced", all_i_replaced);
这是另一个解决方案
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = []
manLastNames.forEach(x => {
if (x.charAt(x.length-1) === "i") womanLastNames.push(x.slice(0,-1).concat("a"));
else womanLastNames.push(x);
});
console.log(womanLastNames);
我需要做的是:
我有一个包含姓氏的字符串数组。其中一些以字母 'i'.
结尾manLastNames = ["testowski","bucz","idzikowski","gosz"];
我需要创建一个函数来遍历这个字符串数组,如果有一个以 'i' 结尾的元素,我需要将这个 'i' 替换为 'a',否则就让字符串保持原样。
最后我想要另一个数组,其中所有最后的 'i's 都替换为 'a's。
女性姓氏 = ["testowska","bucz","idzikowska","gosz"];
这就是我现在拥有的,但我很确定它在某个时候开始变得糟糕
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = new Array(4);
for (var i=0; i<manLastNames.length; i++) {
var lastName = manLastNames[i];
if (lastName.substr(lastName.length - 1, 1) == 'i') {
lastName = lastName.substr(0, lastName.length - 1) + 'a';
}
}
for (var i=0; i<womanLastNames.length; i++) {
womanLastNames[i] = lastName[i];
}
console.log(womanLastNames);
}
rep();
试试代码:
var manNames = ["testowski","bucz","idzkowski","gosz"];
var womanNames = manNames.map(function(name) {
return name.endsWith("i") ? name.slice(0, -1) + "a" : name;
});
console.log(womanNames)
如果你的解释器支持 ES6,下面是等价的:
names.map((name)=>name.endsWith("i") ? name.slice(0, -1) + "a" : name)
这是解决方案
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames =[];
for (var i=0; i<manLastNames.length; i++) {
var lastName = manLastNames[i];
if (lastName.charAt(lastName.length - 1) == 'i') {
lastName = lastName.substr(0, lastName.length - 1) + 'a';
}
womanLastNames.push(lastName);
}
console.log(womanLastNames);
}
rep();
另一个解决方案是使用像这样的.map
方法,使用回调函数:
var manLastNames = ["testowski","bucz","idzikowski","gosz"];
function mapNames(item){
return item[item.length-1]=='i' ? item.substr(0, item.length-1) + "a" : item;
}
console.log(manLastNames.map(mapNames));
这应该有效:
var rep = function() {
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = manLastNames;
for(var i=0; i<manLastNames.length;i++){
if(manLastNames[i].charAt(manLastNames[i].length-1)=='i'){
womanLastNames[i]=manLastNames[i].substr(0,womanLastNames[i].length-1)+'a';
}
}
console.log(womanLastNames);
}
rep();
根据您需要的效率,您可以使用正则表达式来完成这两项任务:
var new_name = name.replace(/i$/, 'a');
将用 "a" 替换字符串中的最后一个 "i"(如果存在)
var new_name = name.replace(/i/g, 'a');
会将字符串中的所有 "i" 替换为 "a"。
var names = ["testowski", "bucz", "idzkowski", "gosz"];
console.log("original", names);
var last_i_replaced = names.map(function(name) {
return name.replace(/i$/, 'a');
});
console.log("last 'i' replaced", last_i_replaced);
var all_i_replaced = names.map(function(name) {
return name.replace(/i/g, 'a');
});
console.log("all 'i's replaced", all_i_replaced);
这是另一个解决方案
var manLastNames = ["testowski","bucz","idzkowski","gosz"];
var womanLastNames = []
manLastNames.forEach(x => {
if (x.charAt(x.length-1) === "i") womanLastNames.push(x.slice(0,-1).concat("a"));
else womanLastNames.push(x);
});
console.log(womanLastNames);