以两种不同的方式编写函数:一种方式会导致 TypeError,另一种方式不会.为什么

Writing a function in two different ways: one way results in a TypeError and the other does not. Why?

本文关键字:方式会 一种 TypeError 为什么 方式不 另一种 两种 方式编 函数      更新时间:2023-09-26

我遇到了一个我不明白发生了什么的问题。这是设置:用户进入屏幕并输入姓氏。我取姓氏并搜索电话簿(当用户进入屏幕时,整个电话簿已被检索,因此它只是作为一个又大又胖的 JavaScript 数组坐在那里)。

假设电话簿对象的每个元素都包含:姓氏、名字和电话号码。现在,我将采用用户输入的姓氏,并在电话簿中循环查找匹配的姓氏。然后,我将每个匹配的元素推送到一个数组中,并向用户显示该数组。

我编写了以两种不同方式执行此操作的方法。在第一种方式中,它返回对象列表。以第二种方式(我的偏好),抛出一个类型错误。

这是第一种方法

$scope.getMatchingLastNames = function(){
for(i=0; i<$scope.phoneBook.length; i++){
    if($scope.lastName==$scope.phoneBook[i].lastName){
          $scope.filteredArray.push($scope.phoneBook[i]);  
    }
};

第二种方法:

$scope.getList = function(){
    $scope.filteredArray = getLastNames($scope.lastName, 
       $scope.phoneBook, $scope.phoneBook.length);
}

哪些调用

function getLastNames(lastName, phoneBook, length)
{
    var filteredArray = [];
    for(var i=0; i<length; i++){
        if(lastName==phoneBook[i].lastName){
            filteredArray.push(phoneBook[i]);  
        }
    }
    return filteredArray;
}

当我运行第二种方法时,我会在Chrome控制台中收到错误,如下所示:

TypeError:  Cannot read property 'lastName' of undefined 

错误指向 if 条件:

if(lastName==phoneBook[i].lastName)

有人可以向我解释为什么第二种方法会导致错误吗?

谢谢。

由于您要实现的是过滤结果列表,因此我建议您使用angularJs过滤器

我用一个简单的例子为你准备了一个jsfiddle:https://jsfiddle.net/fb0r7z0q/

这是关键行:

<li ng-repeat="entry in phonebook | filter:qname">

qname 是你的$scope.姓氏

相关文章: