簡體   English   中英

使用forEach過濾數組

[英]Filter array using forEach

我有一系列日期,我想在其中過濾掉特定的日子。 那是我以前的解決方案,效果很好:

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;
  });
});

這似乎不起作用。 我做錯了什么,如何使它起作用? 提前致謝。

無需使用forEach使用filterincludes

 var unavailable = [0, 2, 3, 6] var dates = ['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']; workingDays = dates.filter(e => { return !unavailable.includes(new Date(e).getDate())}) console.log(workingDays) 

您需要切換比較順序並返回檢查結果。 在這種情況下,您需要Array#every而不是Array#forEach ,因為您需要過濾結果。

available = dates.filter(function(e, index) {
    return unavailable.every(function(x) {
        return e.getDay() != x;
    });
});

Array#some相同,返回結果取反,比較結果取反。

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()));

我為您找到了正確的答案。

let 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重寫每次迭代的可用值,並且您的程序會增加理解的難度。

如果您不拘泥於創建數組,並且不打算在代碼中的其他任何地方使用它,則無需這樣做。

 dates.filter(e => e.getDay().toString().match(/0|6|2|3/)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM