Javascript 如何使用map和filter with object过滤嵌套数组

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

我想返回json数据比较日期过滤器值。我正在使用Array.Filter和Map 我尝试了下面的代码,但它不起作用。你能解释一下如何使用过滤器映射获取返回json比较特定日期吗

数组内部可用性对象代码与日期比较我没有得到返回值

我想比较日期筛选器值

我在代码下面添加了

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对象,因为它来自客户端。。谢谢:)到目前为止,我不确定能不能得到你们想要的,你们能告诉我你们期望的产量吗?