2016-11-18 143 views
0

我需要做如下操作:替换字符串数组中的最后一个字母Javascript

我有一个包含姓氏的字符串数组。其中一些以字母'i'结尾。

manLastNames = [“testowski”,“bucz”,“idzikowski”,“gosz”];

我需要做一个函数来迭代这个字符串数组,如果有一个以'i'结尾的元素,我需要用'i'代替'a',否则只是留下字符串,因为它是。

最后,我想有另一个数组,最后所有'我'被替换为'a'。

womanLastNames = [“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(); 
+1

[如何更换在JavaScript字符串的所有出现?(HTTP的可能重复:// stackoverflow.com/questions/1144783/how-to-replace-all-occurrences-of-a-string-in-javascript) –

回答

1

这里是解决

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)); 
4

尝试代码:

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) 
0

这应该工作:

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();

1

取决于你需要如何高效的是,你可以使用正则表达式来完成这两项任务:

var new_name = name.replace(/i$/, 'a'); 

将取代过去的“我”与“一”,如果一个字符串它存在

var new_name = name.replace(/i/g, 'a'); 

将用“a”替换字符串中的所有“i”。

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);

0

这里是另一种解决方案

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);

相关问题