You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery从日期数组中移除周六和周日的问题排查

解决移除日期数组中周末的问题

嘿,我来帮你揪出这个问题的根源!你遇到的这种「只能删掉周六或周日其中一个」的情况,大概率是踩了遍历原数组时直接删除元素导致索引错位的坑,而不是if条件判断的问题哦~

为什么会出现这个问题?

先看一个你可能写出的错误代码示例:

// 错误写法:直接遍历原数组并使用splice删除
const dateArray = [
  new Date(2024, 8, 14), // 周六(getDay()返回6)
  new Date(2024, 8, 15), // 周日(getDay()返回0)
  new Date(2024, 8, 16)  // 周一(getDay()返回1)
];

for (let i = 0; i < dateArray.length; i++) {
  const day = dateArray[i].getDay();
  // 条件是对的:0=周日,6=周六
  if (day === 0 || day === 6) {
    dateArray.splice(i, 1); // 删除当前元素
  }
}
console.log(dateArray); // 结果可能还剩周日,没被删掉!

原因很简单:当你用splice删掉索引i的元素后,数组长度会减1,后面的元素会往前移动一位。但此时i还在继续递增,就会跳过原本在i+1位置的元素(现在它跑到了i的位置)。比如上面的例子,删掉周六后,周日变成了索引0,但i已经变成1,直接去处理周一了,周日就被漏掉了。

正确的解决方法

推荐两种靠谱的写法:

方法1:倒序遍历数组

从数组末尾往前遍历,这样删除元素不会影响前面未遍历的元素索引:

const dateArray = [
  new Date(2024, 8, 14),
  new Date(2024, 8, 15),
  new Date(2024, 8, 16)
];

// 从最后一个元素往前遍历
for (let i = dateArray.length - 1; i >= 0; i--) {
  const day = dateArray[i].getDay();
  if (day === 0 || day === 6) {
    dateArray.splice(i, 1);
  }
}
console.log(dateArray); // 正确保留周一

方法2:使用filter创建新数组(更推荐)

filter方法会返回一个新数组,完全不修改原数组,逻辑更清晰,也不会有索引问题:

const dateArray = [
  new Date(2024, 8, 14),
  new Date(2024, 8, 15),
  new Date(2024, 8, 16)
];

// 过滤出非周末的日期:保留getDay()既不是0(周日)也不是6(周六)的日期
const workdays = dateArray.filter(date => {
  const day = date.getDay();
  return day !== 0 && day !== 6;
});

console.log(workdays); // 正确得到工作日数组

补充说明

你之前拆分if条件块没用,是因为核心问题不在条件判断本身——day === 0 || day ===6这个条件是完全正确的(记住getDay()返回0是周日,6是周六),问题出在遍历+修改原数组的操作逻辑上。

内容的提问来源于stack exchange,提问作者Cutis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:29:57