Если вы когда-либо использовали 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 Отказ
Как решить найти самое длинное слово в строке с разделенным
Давайте быстро отправимся в какой-то псевдо-код для того, как решить эту проблему:
- Сплит
ул ...| в массив отдельных словСоздайте переменную для отслеживания величайшей длины слова - Итайте через массив слов и сравните длину каждого слова к переменной, упомянутой выше
- Если длина текущего слова больше, чем тот, который хранится в переменной, замените это значение с текущей длиной слова
- Как только продолжительность каждого слова сравнивается с максимальной переменной длины слова, верните этот номер из функции
Сначала разделить Строка в массив отдельных слов:
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/”