Сращивание Javascript () на основе значения смежного элемента (ов)

#javascript #arrays

#javascript #массивы

Вопрос:

В чистом JavaScript, используя функцию getDaysArray, найденную в другом месте в Stack, которая создает одномерный массив объектов Date, я затем вставляю элемент перед каждым воскресеньем. Если следующие 6 дней равны 1, то я вставляю название месяца, в противном случае — разделитель. Вот рабочий код:

 const mon = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];

var getDaysArray = function(s,e) {for(var a=[],d=s;d<=e;d.setDate(d.getDate() 1)){ a.push(new Date(d));}return a;};
da = getDaysArray(new Date(2019,02,31), new Date(2019,04,04));

for(let elementIndex=0; elementIndex < da.length; elementIndex  ){
    let q="";
    if(da[elementIndex].getDay() == 0) {
        for(let lookAheadIndex = elementIndex 1; lookAheadIndex<elementIndex 7; lookAheadIndex  ){
            if (da[lookAheadIndex].getDate() == 1){
                q = mon[da[lookAheadIndex].getMonth()];
            }
        }
            q = (q != "") ? da.splice(elementIndex,0,q) : da.splice(elementIndex,0,'SPACER AT ' elementIndex);
    }
elementIndex  ;
}
document.write(da   "<p>");
document.write(da.length);
  

Есть ли лучший, более быстрый, элегантный и чистый способ добиться этого с использованием встроенных методов массива? Заранее благодарю вас.

Ответ №1:

Документы Array.prototype () из MSDN очень помогли мне в ситуациях, подобных вашей. Возможно, вы захотите ознакомиться с методами, доступными здесь

Комментарии:

1. Спасибо. Я бы действительно хотел заменить циклы for на array.forEach, но у меня возникли проблемы с индексом forEach после вставки соединения. Я понимаю, что forEach определяет длину массива перед функцией, но даже добавление к индексу внутри функции, похоже, не работает.