使用自动完成功能筛选对象内的数组



我正在尝试使用两种过滤方法基于字符串过滤对象中的数组。这是我的对象的样子。

[
{
"cat": "Accommodation and Food Service Activities",
"value": [
{
"sic": "55",
"desc": "Accommodation"
},
{
"sic": "56",
"desc": "Food and beverage service activities"
}
]
},
{
"cat": "Activities Of Extraterritorial Organisations and Bodies",
"value": [
{
"sic": "99",
"desc": "Activities of extraterritorial organisations and bodies"
}
]
}
] 

我正在尝试过滤value.desc并返回cat

这是我到目前为止所拥有的

filteredIndustries(industry: string) {
if (industry) {
return this.industries.filter(sector => {
if (sector.value) {
sector.value.findIndex( v => {
return v.desc.toString().toLowerCase().indexOf(industry.toString().toLowerCase()) === 0;
});
}
});
} else {
return this.industries;
}

这是我的 HTML,

<md-input-container>
<input mdInput placeholder="Industry" [mdAutocomplete]="auto" [formControl]="industryCtrl">
</md-input-container>
<md-autocomplete #auto="mdAutocomplete" [displayWith]="displayIndustry.bind(this)">
<md-option *ngFor="let industry of filteredIndustry | async" [value]="industry">
{{ industry.cat }}
</md-option>
</md-autocomplete>

因此,当我输入食物时,它应该过滤value.desc并返回应该catAccommodation and Food Service Activities

但是即使我的返回结果为真,我也没有获得任何返回值。

任何帮助将不胜感激。

您的filter回调函数缺少返回语句,如果findIndex返回大于 -1 的内容,则应返回true;

filteredIndustries(industry: string) {
if (industry) {
return this.industries.filter(sector => {
if (sector.value) {
return -1 < sector.value.findIndex( v => { //HERE
return v.desc.toString().toLowerCase().indexOf(industry.toString().toLowerCase()) === 0;
});
}
});
} else {
return this.industries;
}
}

您可以使用some()而不是findIndex()。 如果未找到指定的字符串,则indexOf返回 -1。

var industries = [
{
"cat": "Accommodation and Food Service Activities",
"value": [
{
"sic": "55",
"desc": "Accommodation"
},
{
"sic": "56",
"desc": "Food and beverage service activities"
}
]
},
{
"cat": "Activities Of Extraterritorial Organisations and Bodies",
"value": [
{
"sic": "99",
"desc": "Activities of extraterritorial organisations and bodies"
}
]
}
] 
var industry = 'food'
var b = industries.filter(sector => {
if (sector.value) {
return sector.value.some( v => v.desc.toLowerCase().indexOf(industry) >= 0 );
} else {
return industries
}
});
console.log(b)

最新更新