2016-05-27 4 views
-4

Я получаю сообщение об ошибке, когда я введите следующее в Sublime:str.split не является функцией ошибки в JavaScript

function longestWord(str) { 
 
    var result = str[0]; 
 
    str = str.split(' '); 
 

 
    for (var i = 0; i < str.length; i++) { 
 
    if (str[i].length > result.length) { 
 
     result = str[i]; 
 
    } 
 
    } 
 
    return result; 
 
} 
 

 
var sentence = ["the quick brown fox jumped over the lazy dog."]; 
 

 
console.log(longestWord(sentence));

я получаю неперехваченного TypeError: str.split не функция (...)

Что я делаю неправильно? Спасибо!

+1

«Что я делаю неправильно?» --- вы пытаетесь вызвать что-то, что не является функцией. – zerkms

+0

Что вы передаете как 'str'? –

+0

Что такое 'str'? Приведите пример того, как вы называете 'longestWord (', что вы здесь передаете?')' – Marcus

ответ

0

Вы пытаетесь разбить массив, а не строку. Приведенный ниже код исправлен.

function longestWord(str){ 
    var result = str[0]; 
    str = **result**.split(' '); 

    for(var i = 0; i < str.length; i++){ 
     if(str[i].length > result.length){ 
      result = str[i]; 
     } 
    } 

    return result; 
} 
+2

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

+0

Вам нужно 'var longest = '';' и сравнить с этим. 'str [i]' никогда не может быть больше, чем 'result', поскольку он стоит. – 1983

0

Немного более функциональный подход, который немного читательнее.

function getLargestWord(stringOrArray){ 
 
    var words = stringOrArray.toString().match(/\w+/gi); //toString..ifs its an array otherwise dont need it 
 
    var wordLength = words.map((e ,i) => i = e.length); 
 
    var highestNumber = Math.max.apply(null,wordLength); 
 
    
 
    return words[wordLength.indexOf(highestNumber)]; 
 
} 
 
var sentence = "the quick brown fox jumped over the lazy dog."; 
 
console.log(getLargestWord(sentence))

0

Ваша проблема заключается в том, что вы передаете аргумент массива одной строки в вашей функции, а не только проездом в строке.

Также обратите внимание, что существует почти всегда лучший способ, чем использование цикла for. Array.prototype.reduce для обхода массива и возвращает одно значение:


 
var longest = function(str){ 
 
    return str.split(' ').reduce(function(long, cur){ 
 
     return cur.length > long.length ? cur : long; 
 
    }, ''); 
 
}; 
 

 
var str = 'the quick brown fox jumps over the lazy dog'; 
 
console.log(longest(str));

Примечание Вы не должны держать вручную отслеживать индекс, создать временные переменные, или вручную извлекать данные из массива , Как только вы привыкнете к reduce, он может сделать ваш код более четким и помочь предотвратить ошибки.

1
  function longestWord(str) { 
      var result = str[0]; 
      str = str.split(' '); 

       for (var i = 1; i < str.length; i++) { 
       if (str[i].length > result.length) { 
        result = str[i]; 
       } 
      } 
      return result; 
     } 
     var sentence = "the quick brown fox jumped over the lazy dog."; 
     document.write(longestWord(sentence)); 
0

Я наткнулся на это же самое длинное слово вызов, и я не нашел простой выход, так что я создал метод, чтобы разделить предложение в массив, так как str.split() не работает на том, что конкретной платформы.

function splitArray(sentence){ 
    var arrayPosition = 0; 
    var oneWord = ""; 
    var newSentence = sentence + " "; 
    var splitArray = new Array(); 
for(var j = 0; j < newSentence.length; j++){ 
    if(newSentence[j] === " "){ 
     splitArray.push(oneWord); 
     arrayPosition++; 
     oneWord = ""; 
    }else{ 
    if(!isNaN(newSentence[j])){ 
     //don't add to the string 
    }else{ 
     oneWord += newSentence[j]; 
    } 
    } 
} 
return splitArray; 

}; 

Эта функция возвращает массив каждому слову в переданном предложении и не принимает целые числа в качестве символа или строки.

0

Это потому, что вы пытаетесь разбить массив.

Вместо этого передайте строку.

function longestWord(str) { 
    var result = str[0]; 
    str = str.split(' '); 

    for (var i = 1; i < str.length; i++) { 
     if (str[i].length > result.length) { 
      result = str[i]; 
     } 
    } 
    return result; 
} 
var sentence = "the quick brown fox jumped over the lazy dog."; 
document.write(longestWord(sentence)); 
Смежные вопросы