JavaScript的。检查对象数组

时间:2016-06-06 08:05:56

标签: javascript arrays

我有2个清单。一个更大,一个更小。我添加了无限滚动以继续将较大列表中的项目添加到较小的列表中。

// Bigger list (data from DB)
var data; 
// Smaller list 
$scope.projects = [];

$scope.$watch('projectSearch', function (val) {
    if (typeof val !== 'undefined' && val !== "") {
        //console.log("SEARCH: " + val);
        for (var a = 0; a < data.length; a++) {
            if (data[a].name.toLowerCase().indexOf(val) > -1) {
                console.log("FOUND: " + data[a].name);
                if($scope.projects.indexOf(data[a].name) === -1) {
                    console.log("PUSHED " + data[a].name);
                    $scope.projects.push( data[a]);

                } else {
                    console.log("ALREADY IN " + data[a].name);
                }
            }
        }
    }  
});

搜索表单:

<input id="search" ng-model="projectSearch" placeholder="Search ..."/>

问题是它不断将项目推送到新列表。它没有正确检查if语句

if($scope.projects.indexOf(data[a].name) === -1) {
    console.log("PUSHED " + data[a].name);
    $scope.projects.push( data[a]);
}

2 个答案:

答案 0 :(得分:3)

您应该检查data[a],而不是其属性name

if($scope.projects.indexOf(data[a]) === -1) {
    console.log("PUSHED " + data[a].name);
    $scope.projects.push( data[a]);
}

另外,您可以在复制后删除data[a]以便更快地进行下一次搜索

答案 1 :(得分:1)

$scope.projects的类型应为string,假设data[a].name为字符串,则indexOf函数正确