Javascript 使用forEach的滤波器阵列

Javascript 使用forEach的滤波器阵列,javascript,jquery,arrays,filter,Javascript,Jquery,Arrays,Filter,我得到了一个日期数组,我想在其中过滤掉特定的日期。 这是我以前的解决方案,效果很好: var available = dates.filter(function(e) { return ( e.getDay() != 0 && // sunday e.getDay() != 6 && // saturday e.getDay() != 2 && // tuesday e.getDay() != 3 &&a

我得到了一个日期数组,我想在其中过滤掉特定的日期。 这是我以前的解决方案,效果很好:

var available = dates.filter(function(e) {
  return (
    e.getDay() != 0 && // sunday
    e.getDay() != 6 && // saturday
    e.getDay() != 2 && // tuesday
    e.getDay() != 3 && // wednesday
  );
});
现在,我想让它充满活力。所以我得到了这样一个数组:

var unavailable = [0, 2, 3, 6]
unavailable.forEach(function(x){
  available = dates.filter(function(e, index){
    return e.getDay() != x;
  });
});
然后我试着像这样过滤掉那些日子:

var unavailable = [0, 2, 3, 6]
unavailable.forEach(function(x){
  available = dates.filter(function(e, index){
    return e.getDay() != x;
  });
});
这似乎不起作用。我做错了什么?我怎样才能让它起作用?提前感谢。

无需使用forEach use filter和includes

变量不可用=[0,2,3,6] 风险值日期=['1-1-2019','1-2-2019','1-3-2019','1-4-2019','1-5-2019','1-6-2019','1-7-2019','1-8-2019','1-9-2019']; 工作日=日期。筛选日期=>{ return!不可用。includeNew Date.getDate} console.logworkingDays无需使用forEach使用过滤器,包括

变量不可用=[0,2,3,6] 风险值日期=['1-1-2019','1-2-2019','1-3-2019','1-4-2019','1-5-2019','1-6-2019','1-7-2019','1-8-2019','1-9-2019']; 工作日=日期。筛选日期=>{ return!不可用。includeNew Date.getDate}
console.logworkingDays我为您找到了正确的答案

let unavailable = [0, 2, 3, 6];
available = dates.filter(e => !unavailable.includes(e.getDay());

您的代码的问题是,对于不可用数组中的每个元素,您都重置为可用。

我为您找到了正确的答案

let unavailable = [0, 2, 3, 6];
available = dates.filter(e => !unavailable.includes(e.getDay());

代码的问题是,对于不可用数组中的每个元素,您都在重置可用。

您需要切换比较顺序并返回检查结果。在本例中,您需要而不是,因为您需要筛选的结果

available = dates.filter(function(e, index) {
    return unavailable.every(function(x) {
        return e.getDay() != x;
    });
});
返回的结果与否定的比较结果相同

available = dates.filter(function(e, index) {
    return !unavailable.some(function(x) {
        return e.getDay() === x;
    });
});
较短的方法

var unavailable = [0, 2, 3, 6]
    available = dates.filter(e => !unavailable.includes(e.getDay()));

您需要切换比较顺序并返回检查结果。在本例中,您需要而不是,因为您需要筛选的结果

available = dates.filter(function(e, index) {
    return unavailable.every(function(x) {
        return e.getDay() != x;
    });
});
返回的结果与否定的比较结果相同

available = dates.filter(function(e, index) {
    return !unavailable.some(function(x) {
        return e.getDay() === x;
    });
});
较短的方法

var unavailable = [0, 2, 3, 6]
    available = dates.filter(e => !unavailable.includes(e.getDay()));

您可以尝试以下操作:

available = dates.filter(function(e) {
  return unavailable.indexOf(e.getDay()) === -1 ? true : false;
})

代码的问题在于forEach会重写每次迭代的可用值,而您的程序会增加理解的难度。

您可以尝试以下方法:

available = dates.filter(function(e) {
  return unavailable.indexOf(e.getDay()) === -1 ? true : false;
})

代码的问题是forEach会重写每次迭代的可用值,并且您的程序会增加理解的难度。

如果您不严格创建数组,并且不打算在代码中的任何其他地方使用,则无需这样做


dates.filtere=>e.getDay.toString.match/0 | 6 | 2 | 3/ 如果您不严格地创建数组,并且不打算在代码中的任何其他地方使用,那么就没有必要这样做


dates.filtere=>e.getDay.toString.match/0 | 6 | 2 | 3/;代码中的日期是什么?你必须反过来做:dates.filterfunction{/*检查.getDay是否是存储在unavailable*/}中的数组的一部分。日期是什么array@the_ultimate_developer我的问题中没有包含日期数组,因为它只是这样生成的数组[new Date2019-03-07,new Date2019-03-09,…]然后转到[Mon Apr 01 2019 02:00:00 GMT+0200,Tue Apr 02 2019 02:00:00 GMT+0200,…]代码中的日期是什么?您必须反过来执行:dates.filterfunction{/*检查.getDay是否是存储在unavailable中的数组的一部分*/}日期是什么array@the_ultimate_developer我的问题中没有包含日期数组,因为它只是这样生成的数组[new Date 2019-03-07,new Date 2019-03-09,…],然后转到[Mon Apr 01 2019 02:00:00 GMT+0200,Tue Apr 02 2019 02:00 GMT+0200,…]谢谢您的回答!我接受了尼娜的回答,因为它更详细+谢谢你的回答!我接受了尼娜的回答,因为它更详细+1 tho: