Неожиданное значение при подсчете количества слов в текстовом поле

#javascript #angularjs

#javascript #angularjs

Вопрос:

 $scope.cal = function (){
    var totalItems = stringSplit($scope.eatables);
    $scope.value = totalItems;
    if(totalItems == 0){
        $scope.message = "Please enter something";
    }else if(totalItems <= 3){
        $scope.message = "Enjoy!";
    }else{
        $scope.message = "TOO MUCH!";
    }
};

function stringSplit(string){
    var array = string.split(" ");
    var x = array.length;
    return x;
};
  

Я вызываю эту функцию ng-click , но когда поле ввода пустое, оно по-прежнему выдает значение 1. Почему это так?

Комментарии:

1. split всегда возвращает массив, содержащий хотя бы один элемент внутри.

2. тогда как это исправить

3. перед разделением проверьте, имеет ли строка значение vavlue или нет, если она имеет значение, тогда разделите только другое значение x = 0

4. Спасибо, Вики, ваше решение работает.

5. @RajeevMalik Правильный способ поблагодарить кого-то в StackOverflow — это принять его ответ

Ответ №1:

Как насчет этого?

 function stringSplit(string){
    var array = string.split(" ");

    var x = array.length;

    return (array[i] === "" || array[i] === null || array[i] === undefined) ? 0 : x;  //Check whether first element is empty
};
  

Ответ №2:

это происходит потому, что значение модели отображается как «» (пустая строка) оно не определено, если вы попытаетесь его разделить, это будет массив длиной 1, первое значение которого равно » string » string.split(») [«»]

итак, чтобы исправить это, прежде чем разбивать его, вы можете проверить, есть ли какое-то значение или нет, а затем только разделить

измените свою функцию следующим образом

 function stringSplit(string){
var x
if(string){
var array = string.split(" ");
 x = array.length;
alert(string)
alert(x)
return x;
}else {

x =0
return x

}
};
  

вот пример рабочего кода
http://codepen.io/vkvicky-vasudev/pen/XjkZBN