對于以下月/日/年日期字串陣列...
const array1 = ["05/31/2022", "06/01/2022", "06/02/2022"]
...我正在嘗試將陣列配置為切片并洗掉所有日期字串陣列項(以 01 作為日開始),如果它們跟隨在以 31 作為日的日期字串陣列項之后。第 30 天和第 01 天的情況也是如此。
為了處理這個問題,我設定了一個 for 陳述句來回圈遍歷陣列中的所有字串。然后我使用拆分方法從每個陣列項中洗掉“/”,從而將 MM、DD、YYYY 分解為單獨的變數。
for (let i = 0; i < array1.length; i ) {
var [month, day, year] = array1[i].split('/');
console.log(month, day, year)
}
我下一步的意圖是設定一個條件,檢查包含 30 或 31 作為“day”的陣列項是否后跟包含 01 作為“day”的陣列項,然后使用 slice 更快地洗掉后續日期 30th或 31 日。對于這一部分,我嘗試將月、日和年重新合并到單獨的陣列項中,如下所示:
const newArray = []
for (let i = 0; i < array1.length; i ) {
var [month, day, year] = array1[i].split('/');
newArray.push(month day year)
console.log(newArray)
}
輸出:
['05312022', '06012022', '06022022']
但是,我不確定如何設定一個條件來檢查包含 30 或 31 作為“day”的陣列項是否后跟包含 01 作為“day”的陣列項。我該如何進行此類檢查的功能?
uj5u.com熱心網友回復:
您可以遍歷dates陣列并獲取currDayandprevDay如果滿足條件,則對dates陣列進行切片并回傳它。
const solution = (dates) => {
for (let i = 1; i < dates.length; i ) {
const currDay = dates[i].slice(3, 5);
const prevDay = dates[i - 1].slice(3, 5);
if ((currDay === "01") & (prevDay === "31" || prevDay === "30")) {
return dates.slice(0, i);
}
}
return dates;
};
console.log(solution(["05/31/2022", "06/01/2022", "06/02/2022"]));
uj5u.com熱心網友回復:
以下Array#reduce用于
- 保留所有元素,除非
- 保留的元素數量等于正在考慮的索引,并且當前元素具有日期
01并遵循 a30或 a31 - 如果考慮的索引大于保留的專案數,這意味著至少一個元素已被跳過,那么當前元素也將被跳過。
const array1 = ["05/31/2022", "06/01/2022", "06/02/2022"],
output = array1.reduce(
(prev,cur,i) =>
prev.length && ["30","31"].includes( prev.slice(-1)[0].slice(3,5) ) &&
(prev.length === i && cur.slice(3,5) === "01" || i > prev.length) ?
prev :
[...prev, cur],
[]
);
console.log( output );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/475616.html
標籤:javascript 数组 循环 for循环 片
上一篇:如何遍歷陣列并獲取所有專案的值
下一篇:在陣列或物件中查找值
