首页 > 解决方案 > 将数组中字符串的首字母大写

问题描述

我正在尝试编写一个函数,该函数仅将名字和姓氏的第一个字母大写......关于如何处理这个问题的任何想法?

const namesHardest = ['emIly sMith', 'angeliNA Jolie', 'braD piTt'];

function capitalizeNames(peopleArray) {
    return peopleArray.toString().toLowerCase().split('').map(function(word) {
        return (word.charAt(0).toUpperCase() + word.slice(1));
    }).join(' ').split();
}


// set the resulting array to this variabble
const capitalizedNames = capitalizeNames(namesHardest);
capitalizedNames;

标签: javascriptecmascript-6

解决方案


一个问题是使用 array.toString - 这会导致类似的字符串

'emIly sMith angeliNA Jolie braD piTt'

所以,你丢失了你的数组元素

您需要使用 array.map 单独处理每个元素

function capitalizeNames(peopleArray) {
    return peopleArray.map(function(name) { 
        /* do something with each name * 
    })
}

您的另一个问题是split('')将字符串拆分为字符-但您想将其拆分为空格...即split(' ')

所以现在,我们有

function capitalizeNames(peopleArray) {
    return peopleArray.map(function(name) { 
        return name.split(' ').map(function(word) { 
            /* do something with each part of name * 
        });
    });
}

所以,现在,如何将字符串大写 - 您的代码有效,但我更喜欢

word[0].toUpperCase() + word.slice(1).toLowerCase();

把它放在一起,你得到

function capitalizeNames(peopleArray) {
    return peopleArray.map(function(name) { 
        return name.split(' ').map(function(word) { 
            return word[0].toUpperCase() + word.slice(1).toLowerCase();
        });
    });
}

或者,在 ES2015+ 中,使用箭头函数(因为您的代码使用const,为什么不使用所有 ES2015+)

const namesHardest = ['emIly sMith', 'angeliNA Jolie', 'braD piTt'];

const capitalizeNames = peopleArray => peopleArray.map(name => 
	name.split(' ').map(word => 
		word[0].toUpperCase() + word.slice(1).toLowerCase()
	).join(' ')
);

const capitalizedNames = capitalizeNames(namesHardest);
console.log(capitalizedNames);


推荐阅读