从JSON数组中选择特定对象

时间:2013-10-09 01:00:12

标签: javascript json rss winjs

我正在使用 Java脚本

处理Windows 8应用

我会使用Google API获取一些rs并将其转换为JSON格式对象。那么我得到了一些用于rss feed的JSON对象数组。我需要做的是我想根据发布的日期在数组的所有对象中选择几个对象。这意味着我希望从6个小时之前发布的数组中获取所有对象(在当前日期之间和6小时之前除了其他对象之外)..任何人都可以帮助我这样做吗?

我使用此代码获取所有对象。

function loadNews() {
var allEntries = [];   
var pendingRequestCount = listOfFeed.length;
var onRequestFinished = function () {
    pendingRequestCount--;
    if (pendingRequestCount === 0) {
        processItems(allEntries);           
    }
};

for (var x = 0; x < listOfFeed.length; x++) {

        feedburnerUrl = listOfFeed[x].url,
            feedUrl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&output=json&num=999&q=" + encodeURIComponent(feedburnerUrl);
        WinJS.xhr({
            url: feedUrl,
            responseType: "rss/json"
        }).done(function complete(result) {
            var jsonData = JSON.parse(result.response);
            var entries = jsonData.responseData.feed.entries;
            allEntries = allEntries.concat(entries);

            allEntries.sort(function (entry1, entry2) {// Compare the entries by publish date
                return Date.parse(entry2.publishedDate) - Date.parse(entry1.publishedDate); // return get milisecond
            });
            onRequestFinished();
        });
    }  //loop x finish}

}

根据上述信息, allEntries 提供JSON对象数组

非常感谢您的回答

1 个答案:

答案 0 :(得分:0)

您将不得不遍历每个条目并比较日期。对于通过测试的每个日期,将其添加到另一个数组。 E.g。

var newEntries = JSON.parse(result.response),
    filteredEntries = [],
    i,
    testDate = new Date();

testDate = testDate.setHours(testDate.getHours() - 6);

for(i = 0; i < newEntries.length; i++) {
    if(newEntries[i].publishedDate > testDate) {
        filteredEntries.push(newEntries[i]);
    }
}

new Date()始终返回当前日期

Date.getHours()返回日期的小时组件

Date.setHours(hour)设置日期的小时组件

如果hour为负值,则日期将转到前一天。例如,如果您的日期为2013-5-3 04:33,则将hour组件设置为-2会将日期更改为2013-5-2 22:33

在上面的示例中,如果时间是凌晨2:45,它会将时间分量设置为-4,这将导致它在晚上8:45进行测试。前一天。