2017-07-07 36 views
-1

我在这里有一个AngularJS的过滤器。有没有更好的方法呢?如何在AngularJS中优化过滤?

return function (data, selected) { 
     var result = []; 
     if (selected[0] == 'All Types') { 
      result = data; 
     } 
     else { 
      for (var i = 0; i < data.length; i++) { 
       for (var j = 0; j < selected.length; j++) { 
        if (data[i].Type == selected[j]) { 
         result.push(data[i]); 
        } 
       } 
      } 
     } 

     return result; 
    }; 
+0

我觉得没有必要阵列'selected'这里。将选定的值存储在数据记录中。你能更新HTML和完整的代码吗? – Veera

+0

如果只有一个可以匹配所选内容,则可以在if块中使用'continue' – devqon

回答

0
return function (data, selected) { 
     var result = []; 
     if (selected[0] == 'All Types') { 
      result = data; 
     } 
     else { 
      result=data.filter(x=>selected.indexOf(x.Type)>-1); 
     } 

     return result; 
    }; 
+0

这是相同的代码 –

0

选定值使用的数据。我假设选定的值是在数据[i] .selected。

return function (data) { 
    var result = []; 
    if (data[0].selected == 'All Types') { 
     result = data; 
    } 
    else { 
     for (var i = 0; i < data.length; i++) { 
      if (data[i].Type == data[i].selected) { 
       result.push(data[i]);      
      } 
     } 
    } 
    return result; 
}; 

我们可以使用过滤器

return function (data) { 
    if (data[0].selected == 'All Types') { 
     return data; 
    } 
    else { 
     return data.filter(function (item) { 
      return item.Type == item.selected; 
     }); 
    } 

}; 
0

显然,这是使用lodash,但本地方法可以取代:

return (data, selected) => { 
    return 
    _.first(selected) === 'All Types' ? data : 
    _.reduce(data, (sum, value, key) => { 
     if (_.includes(selected, value.Type)) { 
     sum.push(value); 
     } 
     return sum; 
    }, []); 
}