在删除或添加日期时,保持星期数组始终有序

Keep Array of Week Days Always Ordered When Removing or Adding Days

本文关键字:数组 删除 添加 日期      更新时间:2023-09-26

我想保持数组按星期顺序更新

例如:var weekDays = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

现在我有了另一个新的数组里面有一个按钮用来添加不同的星期,比如

var newArry = [];
newArry.push("Fri");
newArry.push("Mon");
newArry.push("Sat");
newArry.splice(1, 1); //remove a day example

现在你可以看到输出将是随机的顺序比如['Fri', 'Mon', 'Sat']我想保持数组的顺序就像原来的weekDays如果要把它转换成数字0-6总是按照0-1-2-3-4-5-6的顺序

我想用下面的_.indexOf(weekDays, day), 0, day,但它仍然有坏的情况下,有时,我的头真的很疼,试图完善这个

假设您不希望得到一个稀疏的数组,您可以定义自己的排序函数,并在任何添加之后简单地使用数组。像这样:

function sortByDay(a,b) {
  var order = {
    Mon: 0,
    Tue: 1,
    Wed: 2,
    Thu: 3,
    Fri: 4,
    Sat: 5,
    Sun: 6
  };
  return order[a] - order[b];
}
var arr = ['Fri', 'Mon', 'Sat'];
arr.sort(sortByDay);
// ['Mon', 'Fri', 'Sat'];

使用方括号标记,直接将项目放在它应该在的位置,使用delete将其删除

var newArray = [];
// adding an item to newArray
newArray[weekDays.indexOf(item)] = item;
// removing an item from newArray
delete newArray[idx];
// or
delete newArray[weekDays.indexOf(item)]

例如,如果你添加"Wed"

newArray[weekDays.indexOf('Wed')] = 'Wed';
newArray; // [undefined × 2, "Wed"]

如果你希望经常这样做你可以稍微加快速度如果你写一个字典,

var d = {};
weekDays.forEach(function (e, i) {d[e] = i;});

现在它只是一个对象循环

newArray[d[item]] = item;
delete newArray[d[item]];