Я пытаюсь написать функцию, которая будет использовать первую букву первого и последнего имени... любые идеи о том, как подойти к этому?
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;
Одна проблема заключается в использовании 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);
Извините, что я опаздываю на вечеринку, я предпочел бы использовать array.from с закрытием
const namesHardest = ['emIly jack sMith', 'angeliNA Jolie', 'braD piTt'];
let conv=Array.from(namesHardest,a=>a.toLowerCase().replace(/\b[a-z]/g, function(letter) {
return letter.toUpperCase();
}))
console.log(conv);
let namesHardest = ['emIly sMith', 'angeliNA Jolie', 'braD piTt'];
namesHardest = namesHardest.map(val => {
let [first, last] = val.toLowerCase().split(' ');
first = first.replace(first[0], first[0].toUpperCase());
last = last.replace(last[0], last[0].toUpperCase());
return '${first} ${last}'
});
console.log(namesHardest);
anThOny sTuarT HeAd
: p
Ваша логика немного выключена. Во-первых, для каждой строки вам нужно разбить ее пробелами, чтобы получить имя и фамилию. Затем вы можете выставить первый символ каждой строки. Увидеть ниже:
const namesHardest = ['emIly sMith', 'angeliNA Jolie', 'braD piTt'];
const capitalizeName = (name) => '${name[0].toUpperCase()}${name.slice(1)}';
const capitalizeNames = (peopleArray) => peopleArray.map(name => {
const [first, last] = name.toLowerCase().split(' ');
return '${capitalizeName(first)} ${capitalizeName(last)}';
});
console.log(capitalizeNames(namesHardest))
anThOny sTuarT HeAd
: p
.split('')
? т.е. не то, что вы хотите