我遇到了一个我不明白发生了什么的问题。这是设置:用户进入屏幕并输入姓氏。我取姓氏并搜索电话簿(当用户进入屏幕时,整个电话簿已被检索,因此它只是作为一个又大又胖的 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.姓氏