gpt4 book ai didi

javascript array.filter() 的函数不起作用

转载 作者:行者123 更新时间:2023-11-30 00:26:35 25 4
gpt4 key购买 nike

当我试图在 md-contact-chips 上搜索时,我遇到了一个错误,显示 createFilterFor 不是一个函数。但我确实将它创建为一个函数,如下所示。我可以知道有什么办法可以解决这个问题吗?

基本上我正在尝试克隆这个 demo但是我没有手动编写联系人姓名,而是调用了数据库中的现有数据,通过使用 http 调用来替换联系人姓名,如下所示 Account.getTastes() 但是,在我获得数据显示md-contact-chip 如下图所示,querySearch 不再工作了。 enter image description here

html

<md-contact-chips required ng-model="tags" md-require-match md-contacts="querySearch($query)" md-contact-name="name" md-contact-image="image"  filter-selected="true" placeholder="Thai, chinese, cheap, cafe and etc">
</md-contact-chips>

Controller.js

$scope.querySearch = querySearch;
$scope.filterSelected = true;
$scope.allContacts = loadContacts();
$scope.allContacts.then(function(contacts){
$scope.tags = [contacts[0],contacts[1]]
})

/**
* Search for contacts.
*/
function querySearch (query) {
var results = query ?
$scope.allContacts.filter(createFilterFor(query)) : [];
return results;
}
/**
* Create filter function for a query string
*/
function createFilterFor(query) {
var lowercaseQuery = angular.lowercase(query);
return function filterFn(contact) {
return (contact._lowername.indexOf(lowercaseQuery) != -1);;
};
}

function loadContacts() {
var contacts;
return Account.getTastes()
.then(function(res) {
contacts = res.data[0].tastes;
return contacts.map(function (c, index) {
var colors = ["1abc9c", "16a085", "f1c40f", "f39c12", "2ecc71", "27ae60", "e67e22","d35400","3498db","2980b9","e74c3c","c0392b","9b59b6","8e44ad","34495e","2c3e50"];
var color = colors[Math.floor(Math.random() * colors.length)];
var cParts = c.split(' ');
var contact = {
name: c,
image: "http://dummyimage.com/50x50/"+color+"/f7f7f7.png&text="+c.charAt(0)
};
contact._lowername = contact.name.toLowerCase();
return contact;
});
})
.catch(function(error) {
console.log("Error:"+error)
});
}

最佳答案

我已经解决了这个问题

我一直收到此错误的原因是因为我的 $scope.allContacts 是一个 promise 而不是一个数组,所以 .filter 将返回错误,指出 createFilterFor 不是一个函数。

   $scope.allTastes.then(function(tastes){
$scope.tags = [tastes[0],tastes[1]]
$scope.allTags = tastes; // create a new $scope to get all tags from the promise
})

/**
* Search for contacts.
*/
function querySearch (query) {
console.log($scope.allTastes) // return a promise
$scope.allTastes= $scope.allTags; // pass it to $scope.allTastes, now it has all the array
var results = query ?
$scope.allTastes.filter(createFilterFor(query)) : [];
return results;

}

感谢大家的帮助!

关于javascript array.filter() 的函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com