2017-01-19 10 views
0

Я знаю атрибут CSS text-transform: capitalize, но может ли кто-нибудь помочь мне с копированием этого с помощью Javascript?Капитализация строки

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

Я получил это далеко, но я застрял, пытаясь сломать мой массив строк, чтобы куски:

function upper(x){ 
    x = x.split(" "); 

    // this function should return chunks but when called I'm getting undefined 
    Array.prototype.chunk = function (n) { 
     return [ this.slice(0, n) ].concat(this.slice(n).chunk(n)); 
    }; 

    x = x.chunk; 

} 

upper("chimpanzees like cigars") 

после куска я угадывание мне нужно снова разделить каждый кусок в к первый символ и остальные символы, используйте .toUpperCase() на первом символе, присоедините его к резервному копированию с оставшимися, а затем снова присоедините куски к строке.

Есть ли более простой способ для этого?

+0

потому, что я только хочу заглавной первую букву каждого слова, а не целое слово –

+0

@rocket получил его, жаль пропустил, что – Deep

ответ

1

Функция map идеально подходит для этого.

w[0].toUpperCase(): Используйте это с заглавной буквы каждого слова

w.slice(1): Возвращает строку из второго символа на

EDGE Case

Если пользователь не вводит string, функция map не будет работать, и будет вызвана ошибка. Это может быть защищено, проверяя, действительно ли пользователь что-то ввел.

var userInput = prompt("Enter a string"); 
 

 
var capitalizedString = userInput == "" ? "Invalid String" : 
 
userInput.split(/\s+/).map(w => w[0].toUpperCase() + w.slice(1)).join(' '); 
 

 
console.log(capitalizedString);

+0

Попробуйте ввести следующую строку: «Я люблю США». Нецелесообразно изменять остальную часть строки. Почему вы предполагаете, что все буквы после первого? Вы должны просто удалить часть '.toLowerCase()'. – connexo

+0

спасибо, это правильно использует ES6? –

+0

Какая кнопка подходит для вашего образца кода? – connexo

0

Вы можете попробовать регулярок подход:

function upperCaseFirst(value) { 
    var regex = /(\b[a-z](?!\s))/g; 
    return value ? value.replace(regex, function (v) { 
     return v.toUpperCase(); 
    }) : ''; 
} 

Это будет захватывать первую букву каждого слова в предложении и капитализировать его, но если вы хотите в первой букве предложения вы можете просто удалить модификатор g в конце объявления регулярного выражения.

+0

приятно, хорошо, чтобы увидеть не ES6 подход тоже –

2

Я придумал решение для обоих в одного слова а также для массива слов. Он также обеспечит, чтобы все другие буквы были строчными. Я также использовал руководство по стилю Airbnb. Надеюсь, это поможет!

const mixedArr = ['foo', 'bAr', 'Bas', 'toTESmaGoaTs']; 
 
const word = 'taMpa'; 
 

 
function capitalizeOne(str) { 
 
    return str.charAt(0).toUpperCase().concat(str.slice(1).toLowerCase()); 
 
} 
 

 

 
function capitalizeMany(args) { 
 
    return args.map(e => { 
 
    return e.charAt(0).toUpperCase().concat(e.slice(1).toLowerCase()); 
 
    }); 
 
}; 
 

 
const cappedSingle = capitalizeOne(word); 
 
const cappedMany = capitalizeMany(mixedArr); 
 

 
console.log(cappedSingle); 
 
console.log(cappedMany);

1

Вы можете использовать следующее решение, которое не использует регулярное выражение.

function capitalize(str=''){ 
    return str.trim().split('') 
    .map((char,i) => i === 0 ? char.toUpperCase() : char) 
    .reduce((final,char)=> final += char, '') 
    } 

capitalize(' hello')      // Hello 

 Смежные вопросы

  • Нет связанных вопросов^_^