Javascript 如何使用map和filter with object过滤嵌套数组
我想返回json数据比较日期过滤器值。我正在使用Array.Filter和Map 我尝试了下面的代码,但它不起作用。你能解释一下如何使用过滤器映射获取返回json比较特定日期吗 数组内部可用性对象代码与日期比较我没有得到返回值 我想比较日期筛选器值 我在代码下面添加了Javascript 如何使用map和filter with object过滤嵌套数组,javascript,angular,typescript,Javascript,Angular,Typescript,我想返回json数据比较日期过滤器值。我正在使用Array.Filter和Map 我尝试了下面的代码,但它不起作用。你能解释一下如何使用过滤器映射获取返回json比较特定日期吗 数组内部可用性对象代码与日期比较我没有得到返回值 我想比较日期筛选器值 我在代码下面添加了 let cruiseFilterData = [{ "name":"text--1", "availabilities":{ "2019":{ "year":"20
let cruiseFilterData = [{
"name":"text--1",
"availabilities":{
"2019":{
"year":"2019",
"items":[
{
"discount":{
"name":"one"
},
"dateDepart":"12\/10\/2019"
},
{
"discount":{
"name":"Two"
},
"dateDepart":"15\/12\/2019"
}
]
}
},
"sort":0,
"featured":true
},
{
"name":"text--2",
"availabilities":{
"2019":{
"year":"2019",
"items":[
{
"discount":{
"name":"one"
},
"dateDepart":"18\/05\/2019"
},
{
"discount":{
"name":"two"
},
"dateDepart":"12\/10\/2019"
}
]
}
},
"sort":1,
"featured":true
},
{
"name":"text--3",
"availabilities":{
"2019":{
"year":"2019",
"items":[
{
"discount":{
"name":"one"
},
"dateDepart":"25\/05\/2019"
},
{
"discount":{
"name":"two"
},
"dateDepart":"12\/10\/2019"
}
]
}
},
"sort":2,
"featured":true
},
{
"name":"text--4",
"availabilities":null,
"sort":2,
"featured":true
}
]
let compareDate = 'Sat Oct 12 2019 00:00:00 GMT+0400 (Mauritius Standard Time)';
const linkedItinery = cruiseFilterData.map((element) => {
element.availabilities = Object.keys(element.availabilities).filter((value, index) => {
element.availabilities[value].items.filter((value, index) => {
const dateValue = value.dateDepart;
if (dateValue.indexOf('/') >= 0) {
const dateSpilt = dateValue.split(' ')[0];
const parts = dateSpilt.split('/');
if (parts) {
const dateMerge = '' + parts[1] + '/' + parts[0] + '/' + parts[2];
propDate = new Date(dateMerge);
} else {
propDate = new Date(dateValue);
}
}
if(propDate.toDateString() === compareDate.toDateString()) {
return value;
}
});
return value;
});
return element;
});
console.log(linkedItinery);
如果您的目标是根据用户日期选择筛选可用巡航基础列表(这里用变量
compareDate
表示),那么我不能100%确定您是否理解到目前为止您试图实现的目标。您可以按如下方式更新代码:
让cruiseFilterData=[{
“名称”:“文本--1”,
“可用性”:{
"2019":{
“年份”:“2019年”,
“项目”:[
{
“折扣”:{
“名称”:“一”
},
“日期离开”:“2019年10月12日”
},
{
“折扣”:{
“姓名”:“两个”
},
“日期离开”:“2019年12月15日”
}
]
}
},
“排序”:0,
“特色”:真实
},
{
“名称”:“文本--2”,
“可用性”:{
"2019":{
“年份”:“2019年”,
“项目”:[
{
“折扣”:{
“名称”:“一”
},
“日期离开”:“2019年5月18日”
},
{
“折扣”:{
“姓名”:“两个”
},
“日期离开”:“2019年10月12日”
}
]
}
},
“排序”:1,
“特色”:真实
},
{
“名称”:“文本--3”,
“可用性”:{
"2019":{
“年份”:“2019年”,
“项目”:[
{
“折扣”:{
“名称”:“一”
},
“日期离开”:“2019年5月25日”
},
{
“折扣”:{
“姓名”:“两个”
},
“日期离开”:“2019年10月12日”
}
]
}
},
“排序”:2,
“特色”:真实
},
{
“名称”:“文本--4”,
“可用性”:空,
“排序”:2,
“特色”:真实
}
]
let compareDate=新日期(2019年12月15日);//年,月,日。
让linkedItinery=cruiseFilterData.filter((cruise)=>{
//排除没有任何可用性的所有巡航
如果(!cruise.availabilities)返回false;
//检查当前巡航是否至少有一个选定日期的可用性。
返回Object.values(cruise.availabilities).findIndex(availability=>{
返回可用性.items.findIndex((item)=>{
//首先我们把日期除以。
const[日、月、年]=item.dateDepart.split('/');
//我们在约会。
const dateValue=新日期(年、月、日);
//我们比较两个日期以检查是否相同。
return dateValue.getTime()==compareDate.getTime();
}) !== -1;
})!==-1;//-1表示找不到。在这里使用findIndex很有趣,因为他会在找到与回调标准匹配的第一个元素后立即停止循环。这样可以避免过度循环。
});
console.log(linkedItinery)代码>Bonzour Vivek,欢迎来到stackoverflow。是否可以使用Date
对象而不是纯字符串?否则,您将在时区转换方面面临许多麻烦。Bonzour Yanis git,我们无法修改json对象,因为它来自客户端。。谢谢:)到目前为止,我不确定能不能得到你们想要的,你们能告诉我你们期望的产量吗?