未定義のプロパティ「分割」を読み取れません

JavaScriptのsplitメソッドを使用したことがある場合は、次のエラーが発生する可能性がありますTypeError: Cannot read property 'split' of undefined

このエラーが発生する理由はいくつかあります。ほとんどの場合、それはどのようにsplit機能し、どのように配列を反復するかについての基本的な誤解にすぎません。

たとえば、「文字列内の最長の単語を検索」チャレンジに次のコードを送信しようとすると、次のようになります。

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog");

TypeError: Cannot read property 'split' of undefinedエラーがスローされます。

split方法

場合はsplit、文字列で呼び出され、それが引数として渡されたセパレータに基づいて部分文字列に文字列を分割します。空の文字列が引数として渡された場合、split各文字は部分文字列として扱われます。次に、部分文字列を含む配列を返します。

const testStr1 = "Test test 1 2"; const testStr2 = "cupcake pancake"; const testStr3 = "First,Second,Third"; testStr1.split(" "); // [ 'Test', 'test', '1', '2' ] testStr2.split(""); // [ 'c', 'u', 'p', 'c', 'a', 'k', 'e', ' ', 'p', 'a', 'n', 'c', 'a', 'k', 'e' ] testStr3.split(","); // [ 'First', 'Second', 'Third' ] 

の詳細については、MDNを確認してくださいsplit

例で説明されている問題

splitメソッドが何を返すか、そして期待できる部分文字列の数を知ることは、この課題を解決するための鍵です。

上記のコードをもう一度見て、期待どおりに機能しない理由を見てみましょう。

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); array[i].split(""); } } findLongestWord("The quick brown fox jumped over the lazy dog"); 

strこの(const array = str.split(" ");)のような配列への分割は期待どおりに機能し、を返します[ 'The',   'quick',   'brown',   'fox',   'jumped',   'over',   'the',   'lazy',   'dog' ]

しかし、forループを詳しく見てください。の長さarrayを反復する条件として使用するのistr.lengthはなく、代わりにを使用します。

str「速い茶色のキツネが怠惰な犬を飛び越えた」でありstr.length、コンソールにログインすると、44を取得します。

forループ本体の最後のステートメントは、エラーの原因ですarray[i].split("");。の長さarrayは9なので、iすぐに最大長を超えてしまいますarray

function findLongestWord(str) { for(let i = 0; i < str.length; i++) { const array = str.split(" "); console.log(array[i]); // array[0]: "The" // array[1]: "quick" // array[2]: "brown" // ... // array[9]: "dog" // array[10]: undefined // array[11]: undefined } } findLongestWord("The quick brown fox jumped over the lazy dog"); 

array[i].split("");各文字列を文字の部分文字列に分割するために呼び出すことは有効なアプローチですが、TypeError: Cannot read property 'split' of undefined渡されるとスローされundefinedます。

文字列内の最長の単語を検索するを解決する方法 split

この問題を解決する方法について、いくつかの擬似コードを簡単に見ていきましょう。

  1. str個々の単語の配列に分割
  2. 最大の単語長を追跡する変数を作成します
  3. 単語の配列を反復処理し、各単語の長さを上記の変数と比較します
  4. 現在の単語の長さが変数に格納されている長さよりも長い場合は、その値を現在の単語の長さに置き換えます
  5. すべての単語の長さが最大単語長変数と比較されたら、関数からその数を返します

まず、str個々の単語の配列に分割します。

function findLongestWordLength(str) { const array = str.split(" "); }

最長の単語の長さを追跡する変数を作成し、それをゼロに設定します。

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; }

今の価値があることarray['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']、あなたが使用することができarray.length、あなたの中でforループ:

function findLongestWordLength(str) { const array = str.split(" "); let maxWordLength = 0; for (let i = 0; i < array.length; i++) { } }

単語の配列を繰り返し処理し、各単語の長さを確認します。文字列も持っていることを忘れないでくださいlength、あなたが簡単に文字列の長さを取得するために呼び出すことができる方法を:

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i < array.length; i++) { array[i].length; } }

if現在の単語(array[i].length)の長さがmaxLength。より大きい場合は、ステートメントチェックを使用します。その場合は、の値maxLengtharray[i].length:に置き換えます。

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } }

最後に、maxLength関数の最後、forループの後に戻ります。

function findLongestWordLength(str) { const array = str.split(" "); let maxLength = 0; for (let i = 0; i  maxLength) { maxLength = array[i].length; } } return maxLength; }