gpt4 book ai didi

javascript - 如何在javascript中按日期范围过滤json数据

转载 作者:数据小太阳 更新时间:2023-10-29 04:10:22 25 4
gpt4 key购买 nike

我想按开始日期和结束日期过滤下面的 json 数据,它应该返回开始日期和结束日期之间的数据,我试图使用下面的代码来实现,但我做错了什么来过滤。我是 Javascript 和 jquery 等前端技术的新手,如果有人可以纠正我在这里做错了什么,我将不胜感激:

<html>
<head>
<title>Test</title>

</head>

<body>

<script type="text/javascript">
var product_data = [
{
"productId": "12",
"productName": "ProductA",
"productPrice": "1562",
"ProductDateCreated": "2015-07-24T12:58:17.430Z",
"TotalProduct": 294
},
{
"productId": "13",
"productName": "ProductB",
"productPrice": "8545",
"TotalProduct": 294,
"ProductHits": {
"2015-08-01T00:00:00Z"
}
},
{
"productId": "14",
"productName": "ProductC",
"productPrice": "8654",
"TotalProduct": 78,
"ProductHits": {
"2015-08-10T00:00:00Z"
}
},
{
"productId": "15",
"productName": "ProductD",
"productPrice": "87456",
"TotalProduct": 878,
"ProductHits": {
"2015-05-12T00:00:00Z"
}
}
];

var startDate = "2015-08-04";
var endDate = "2015-08-12";

var resultProductData = product_data.filter(
function (a)
{
return (a.ProductHits) > startDate && (a.ProductHits) < endDate;
});
console.log(resultProductData);
</script>

</body>
</html>

最佳答案

        var startDate = new Date("2015-08-04");
var endDate = new Date("2015-08-12");

var resultProductData = product_data.filter(function (a) {
var hitDates = a.ProductHits || {};
// extract all date strings
hitDates = Object.keys(hitDates);
// convert strings to Date objcts
hitDates = hitDates.map(function(date) { return new Date(date); });
// filter this dates by startDate and endDate
var hitDateMatches = hitDates.filter(function(date) { return date >= startDate && date <= endDate });
// if there is more than 0 results keep it. if 0 then filter it away
return hitDateMatches.length>0;
});
console.log(resultProductData);

fiddle :http://jsfiddle.net/4nz1ahuw/


更新 正如 Ates Goral 在评论中建议的那样,可以使用 Array.protype.some 优化上述解决方案:

        var startDate = new Date("2015-08-04");
var endDate = new Date("2015-08-12");

var resultProductData = product_data.filter(function (a) {
var hitDates = a.ProductHits || {};
// extract all date strings
hitDates = Object.keys(hitDates);
// improvement: use some. this is an improment because .map()
// and .filter() are walking through all elements.
// .some() stops this process if one item is found that returns true in the callback function and returns true for the whole expression
hitDateMatchExists = hitDates.some(function(dateStr) {
var date = new Date(dateStr);
return date >= startDate && date <= endDate
});
return hitDateMatchExists;
});
console.log(resultProductData);

谢谢你的好建议:)

关于javascript - 如何在javascript中按日期范围过滤json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com