14

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));
4

16 に答える 16

22

実際に配列要素を再割り当てする必要があります。

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

「toUpperCase()」関数は新しい文字列を返しますが、元の文字列は変更しません。

newArr[i]入力文字列にダッシュが 2 つ連続して含まれている場合は、最初にそれが空の文字列であることを確認する必要があります。

編集— SO の寄稿者 @lonesomeday は、各文字列の残りの部分も接着する必要があることを正しく指摘しています。

         newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
于 2011-10-12T16:51:17.840 に答える
6

ループでは、単に評価するのでforはなく、値を置き換える必要があります。newArr[i]

for(var i = 1 ; i < newArr.length ; i++){
    newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
}
于 2011-10-12T16:52:32.263 に答える
2

ハイフンと小文字を大文字に置き換える配列は必要ありません。

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
*/
于 2011-10-12T16:58:37.740 に答える
2

大文字の文字を配列に戻す必要があります。以下の変更されたループを参照してください。

for(var i = 1 ; i < newArr.length ; i++)
{
    newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1,newArr[i].length-1);
}
于 2011-10-12T16:59:44.113 に答える
2

少し長くなりますが、基本的に配列で遊んで仕事を終わらせます:

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");
于 2016-01-21T12:54:06.127 に答える
0

これが私がそれについて行く方法です。

function capitalizeFirst(arr) {
  if (arr.length === 1) {
    return [arr[0].toUpperCase()];
  }
  let newArr = [];
  for (let val of arr) {
    let value = val.split("");
    let newVal = [value[0].toUpperCase(), ...value.slice(1)];
    newArr.push(newVal.join(""));
  }
  return newArr;
}
于 2019-12-02T13:29:40.203 に答える
0

これが、slice() メソッドを使用した私のソリューションです。

const names = ["alice", "bob", "charlie", "danielle"]

const capitalized = names.map((name) => {
    return name[0].toUpperCase() + name.slice(1)

}))

console.log(大文字)

// 期待される出力: // ["Alice", "Bob", "Charlie", "Danielle"]

于 2021-12-31T20:48:30.173 に答える