Пытаясь использовать первый символ в массиве строк, почему это не работает? - PullRequest
9 голосов
/ 12 октября 2011

Я новичок в Javascript. Я пытаюсь написать функцию, которая преобразует, например, list-style-image в listStyleImage.

Я придумал функцию, но она не работает. Кто-нибудь может указать мне на проблему здесь?

var myStr = "list-style-image";

function camelize(str){
    var newStr = "";    
    var newArr = [];
    if(str.indexOf("-") != -1){
        newArr = str.split("-");
        for(var i = 1 ; i < newArr.length ; i++){
            newArr[i].charAt(0).toUpperCase();
        }       
        newStr = newArr.join("");
    }
    return newStr;
}

console.log(camelize(myStr));

Ответы [ 10 ]

16 голосов
/ 12 октября 2011

Вы должны заново назначить элемент массива:

    for(var i = 1 ; i < newArr.length ; i++){
        newArr[i] = newArr[i].charAt(0).toUpperCase();
    }       

Функция «toUpperCase ()» возвращает новую строку, но не изменяет оригинал.

Возможно, вы захотите проверить, чтобы сначала убедиться, что newArr[i] - пустая строка, на случай, если вы получите входную строку с двумя последовательными штрихами.

edit & mdash; отмеченный автор SO @lonesomeday правильно указывает, что вам также нужно приклеить оставшуюся часть каждой строки обратно:

         newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
6 голосов
/ 12 октября 2011

В вашем цикле for вам нужно заменить значение newArr[i] вместо простой его оценки:

for(var i = 1 ; i < newArr.length ; i++){
    newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
}
5 голосов
/ 30 декабря 2017

Вот мое решение с ES6. Это пример, где я храню дни недели в своем массиве и пишу их в верхнем регистре с помощью цикла for... of.

const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];

for (let day of days) {
    day = day.charAt(0).toUpperCase() + day.substr(1);
    console.log(day);
}

Вот ссылка на документацию: для ... документации цикла

2 голосов
/ 17 мая 2018

Метод substr() возвращает часть строки между начальным индексом и количеством символов после него. Источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr

const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
for (let day of days) {
  day = day.substr(0, 1).toUpperCase() + day.substr(1);
  console.log(day);
}
2 голосов
/ 21 января 2016

Немного дольше, но он выполняет работу, играя с массивами:

function titleCase(str) {
  var arr = [];
  var arr2 = [];
  var strLower = "";
  var strLower2 = "";
  var i;
  arr = str.split(' ');

  for (i=0; i < arr.length; i++) {

    arr[i] = arr[i].toLowerCase();
    strLower = arr[i];
    arr2 = strLower.split('');
    arr2[0] = arr2[0].toUpperCase();
    strLower2 = arr2.join('');
    arr[i] = strLower2;
  }

  str = arr.join(' ');

  return str;
}

titleCase("I'm a little tea pot");
2 голосов
/ 12 октября 2011

вам нужно сохранить заглавную букву обратно в массив.Пожалуйста, обратитесь к измененному циклу ниже,

for(var i = 1 ; i < newArr.length ; i++)
{
    newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1,newArr[i].length-1);
}
2 голосов
/ 12 октября 2011

Вам не нужен массив для замены дефиса и строчной буквы заглавной -

function camelCase(s){
    var rx=  /\-([a-z])/g;
    if(s=== s.toUpperCase()) s= s.toLowerCase();
    return s.replace(rx, function(a, b){
        return b.toUpperCase();
    });
}

camelCase("list-style-image")

/*  returned value: (String)
listStyleImage
*/
1 голос
/ 18 декабря 2018

Начиная с JavaScript ES6, вы можете добиться «верблюдования» массива строк одной строкой:

let newArrCamel= newArr.map(item=> item.charAt(0).toUpperCase() + item.substr(1).toLowerCase())
1 голос
/ 11 июля 2018

const days = ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'];

days.map (a => a.charAt (0) .toUpperCase () + a.substr (1));

0 голосов
/ 15 июня 2017
function titleCase(str){    // my codelooks like Jmorazano but i only use 4 var.
var array1 = [];
var array2 = []; 
var array3 = "";
var i;
array1 = str.split(" ");
for (i=0; i < array1.length; i++) {
array1[i]= array1[i].toLowerCase();
array2=array1[i].split("");
array2[0]=array2[0].toUpperCase();
array3 = array2.join("");
array1[i] = array3;}

str = array1.join(' ');
return str;}
titleCase("I AM WhO i aM"); //Output:I Am Who I Am
// my 1st post.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...