Рубрики
Без рубрики

Не может прочитать свойство «разделение» не определено

Если вы когда-либо использовали метод разделения JavaScript, есть хороший шанс, что вы столкнулись с следующей ошибкой: TypeError: не удается прочитать свойство «Split» undefined. Есть несколько причин, почему вы получите эту ошибку. Скорее всего, это просто основное недопонимание того, как расколотые работы и как повторить

Если вы когда-либо использовали JavaScript Сплит Метод, есть хороший шанс, что вы столкнулись с следующей ошибкой: TypeError: не удается прочитать свойство «разделение» undefined Отказ

Есть несколько причин, почему вы получите эту ошибку. Скорее всего, это просто базовое недопонимание того, как Сплит Работает и как итерации через массивы.

Например, если вы попытаетесь отправить следующий код для поиска самого длинного слова в строке Challenge:

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: не удается прочитать свойство «разделение» undefined ошибка.

Метод разделения

Когда Сплит Вызывается в строке, она разделяет строку на подстроки на основе сепаратора, прошедшего в качестве аргумента. Если пустая строка пропускается как аргумент, Сплит относится к каждому персонажу как подстрок. Затем он возвращает массив, содержащий подстроки:

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 Для получения более подробной информации о расколоть .

Проблема объяснена примерами

Зная, что Сплит Метод возвращается и сколько подстроки вы можете ожидать, является ключом к решению Этот вызов Отказ

Давайте возьмем еще один взгляд на код выше и посмотрите, почему он не работает должным образом:

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

Расщепление ул ...| в массив, как это ( const.split (“”); ) работает как ожидалось и возвращает [«« Быстрый »,« коричневый »,« лиса »,« прыгнул »,« над »,« «ленивый», «собака»] Отказ

Но посмотрите поближе на для петля. Вместо того, чтобы использовать длину Массив как условие для итерации Я , str.length используется вместо этого.

ул ...| «Быстрая коричневая лиса прыгнула над ленивой собакой», и если вы регистрируете str.length на консоль, вы получите 44.

Последнее утверждение в теле для Цикл – это то, что вызывает ошибку: массив [I] .split (""); Отказ Длина Массив 9, так Я будет быстро пойти на максимальную длину Массив :

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

Призыв массив [I] .split (""); Разделить каждую строку в подстроки символов, является действительным подходом, но он будет бросать TypeError: не может прочитать свойство «разделение» не определено когда это передано undefined Отказ

Как решить найти самое длинное слово в строке с разделенным

Давайте быстро отправимся в какой-то псевдо-код для того, как решить эту проблему:

  1. Сплит ул ...| в массив отдельных слов Создайте переменную для отслеживания величайшей длины слова
  2. Итайте через массив слов и сравните длину каждого слова к переменной, упомянутой выше
  3. Если длина текущего слова больше, чем тот, который хранится в переменной, замените это значение с текущей длиной слова
  4. Как только продолжительность каждого слова сравнивается с максимальной переменной длины слова, верните этот номер из функции

Сначала разделить Строка в массив отдельных слов:

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

Создайте переменную для отслеживания самого длинного длинного слова и установите его на ноль:

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

Теперь, когда ценность Массив это [«« Быстрый »,« коричневый »,« лиса »,« прыгнул »,« над »,« «ленивый», «собака»] , вы можете использовать array.length В вашем для петля:

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

Итайте через массив слов и проверьте длину каждого слова. Помните, что строки также имеют Длина Метод вы можете позвонить легко получить длину строки:

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

Используйте Если Заявление Проверьте, если длина текущего слова ( массив [I] .length ) больше, чем Maxlength Отказ Если это так, замените значение Maxlength с Массив [I]. Длина :

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

Наконец, верните Maxlength В конце функции после для петля:

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

Оригинал: “https://www.freecodecamp.org/news/cannot-read-property-split-of-undefined-error/”