在javascript中过滤对象数组

我想按属性值过滤JavaScript对象。 这是一个场景:

下面的数组是我正在使用的一个小例子

var array = [{ "Title": "July 13 - July 19 2014", "displayAd_imp": "15,242,505", "Date": "2014-07-17T00:00:00.000Z", "WeekNo": 29 }, { "Title": "July 20 - July 26 2014", "displayAd_imp": "15,942,705", "Date": "2014-07-24T00:00:00.000Z", "WeekNo": 30 }, { "Title": "July 27 - Aug 2 2014", "displayAd_imp": "15,683,545", "Date": "2014-07-31T00:00:00.000Z", "WeekNo": 31 }, { "Title": "Aug 3 - Aug 9 2014", "displayAd_imp": "15,042,005", "Date": "2014-08-07T00:00:00.000Z", "WeekNo": 32 }, { "Title": "Aug 10 - Aug 17 2014", "displayAd_imp": "15,442,605", "Date": "2014-08-14T00:00:00.000Z", "WeekNo": 33 }] 

在我的应用程序中有两个下拉字段,可让用户选择一周的范围。 我正在通过“日期”计算周数并将“WeekNo”作为属性插入。 我想使用WeekNo根据起始端值获取一大块数据。

例如,如果开始日期是第29周,结束是第32周,则该方法将返回相关数据。

如果有人想要更新它,我会有一个Jsfiddle 。

非常感谢提前!

您可以使用Array.filter函数。 您可以直接在arrays上调用它,然后提供回调。 如果该回调返回true,则该元素包含在从filter返回的新数组中。

例如:

 var newArr = array.filter(function(item) { return (item.WeekNo >= 29 && item.WeekNo < 32); }); 

这是一个更新的JSfiddle包括这个。

  var array = [{ "Title": "July 13 - July 19 2014", "displayAd_imp": "15,242,505", "Date": "2014-07-17T00:00:00.000Z", "WeekNo": 29 }, { "Title": "July 20 - July 26 2014", "displayAd_imp": "15,942,705", "Date": "2014-07-24T00:00:00.000Z", "WeekNo": 30 }, { "Title": "July 27 - Aug 2 2014", "displayAd_imp": "15,683,545", "Date": "2014-07-31T00:00:00.000Z", "WeekNo": 31 }, { "Title": "Aug 3 - Aug 9 2014", "displayAd_imp": "15,042,005", "Date": "2014-08-07T00:00:00.000Z", "WeekNo": 32 }, { "Title": "Aug 10 - Aug 17 2014", "displayAd_imp": "15,442,605", "Date": "2014-08-14T00:00:00.000Z", "WeekNo": 33 }] var predicate = function(start, end) { return function(array) { return _.inRange(array.WeekNo, start, end + 1); } } var result = _.filter(array, predicate(29, 32)); console.log('inRange', result);