2017-07-07 105 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; 
    }, []); 
}