search(event) {
this.autocompletedata.forEach((entry) => {
if (this.showFilter === '1') {
this.results = entry['items'].filter(a => a['item'] ? a['item'].startsWith(event.query) : false);
} else if (this.showFilter === '2') {
this.results = entry['items'].filter(a => a['service'] ? a['service'].startsWith(event.query) : false);
} else {
this.results = entry['items'].filter(a => a['phoneNum'] ? a['phoneNum'].startsWith(event.query) : false);
}
});
}
当我使用startWith时遇到问题。我收到这个错误:
无法读取未定义的属性'startsWith'
我在array
内array
。所以im foreach
第一个数组和内部我找到了array
个项目。在items
内,我有财产item
。现在我使用自动完成,所以当我进入测试以获得所有数据与测试。有什么建议我做错了吗?
答案 0 :(得分:0)
尝试扩展lambda函数以使其具有正确的正文并调试代码(如@Oliver提及的那样)以找到任何可能的数据不一致。
我可以看到你的代码的另一个问题。在results
的每次迭代中,您都会覆盖results
变量。这意味着,当外部循环完成时,map
将仅包含循环偶然发现的最后一个数组。该数组可以为空,因为您的过滤器可能没有找到任何内容。我建议使用flatMap
函数进行此类转换,或者var data = [
{items: [{item: 'a', service: 'a', phone: 'a'},{item: 'b', service: 'b', phone: 'b'}]},
{items: [{item: 'a', service: 'a', phone: 'a'},{item: 'b', service: 'b', phone: 'b'}]}
];
var getFilter = prop => { return e => { return e[prop] && e[prop].startsWith(query) } };
var filters = { 1: getFilter('item'), 2: getFilter('service'), 3: getFilter('phone')};
var query = 'a', showFilters = 1;
var results = data.map(entry => { return entry['items'].filter(filters[showFilters]) });
console.log(results);
// flatMap is not on Array.prototype, you can define it yourself
Array.prototype.flatMap = f => { return this.map(f).reduce((x,y) => { return x.concat(y) }, []) };
results = data.flatMap(entry => { return entry['items'].filter(filters[showFilters]) });
console.log(results);
以防最终不再需要数组数组。
这样的事情应该有效:
{{1}}