jqu*_*ner 9 javascript jquery json
我想通过开始日期和结束日期过滤下面的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>
Run Code Online (Sandbox Code Playgroud)
Seu*_*ope 18
我无法使上述解决方案发挥作用。我发现对这里对我有用的已批准答案进行了轻微修改。下面的代码片段完成了工作。
var startDate = new Date("2015-08-04");
var endDate = new Date("2015-08-12");
var resultProductData = product_data.filter(a => {
var date = new Date(a.ProductHits);
return (date >= startDate && date <= endDate);
});
console.log(resultProductData)
Run Code Online (Sandbox Code Playgroud)
Jos*_*a K 10
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);
Run Code Online (Sandbox Code Playgroud)
小提琴: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);
Run Code Online (Sandbox Code Playgroud)
谢谢你的好建议:)
| 归档时间: |
|
| 查看次数: |
23520 次 |
| 最近记录: |