Прописать первые буквы строки в массиве

1

Я пытаюсь написать функцию, которая будет использовать первую букву первого и последнего имени... любые идеи о том, как подойти к этому?

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;
  • 0
    Вы видите, что .split('') ? т.е. не то, что вы хотите
  • 0
    @JaromandaX Я думаю, что проблема еще до этого с toString (), нет? Я просто не знаю, что я мог бы использовать вместо этого.
Показать ещё 8 комментариев
Теги:
ecmascript-6

4 ответа

5
Лучший ответ

Одна проблема заключается в использовании 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);
  • 0
    Это то, что мне нужно выучить, написав исчерпывающий ответ :)
  • 1
    Я делаю это так редко: p, как правило, только тогда, когда вопрос показывает честную попытку: p Мне, кстати, нравится ваш ответ, просто я хочу показать, что в JS всегда есть несколько способов снять шкуру с кошки: p
2

Извините, что я опаздываю на вечеринку, я предпочел бы использовать 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);
0

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);
  • 0
    Что делать, если есть имя типа anThOny sTuarT HeAd : p
0

Ваша логика немного выключена. Во-первых, для каждой строки вам нужно разбить ее пробелами, чтобы получить имя и фамилию. Затем вы можете выставить первый символ каждой строки. Увидеть ниже:

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))
  • 1
    Что делать, если есть имя типа anThOny sTuarT HeAd : p

Ещё вопросы

Сообщество Overcoder
Наверх
Меню