Мне нужно изменить номер месяца, который я получил из базы данных, и преобразовать его в название месяца. Номер месяца помещается в массив и, будучи новичком в мире массивов, я не уверен, что является лучшим методом для замены.

The array result once retrieved from database

        var monthNames = ["January", "February", "March", "April", "May", "June",
                        "July", "August", "September", "October", "November", "December"];
        var month = [];
        var caseidnum = [];

        for(var i in data) {
            month.push(data[i].Month);
            caseidnum.push (data[i].Num);   
        }
0
Brian 8 Янв 2017 в 07:12

3 ответа

Лучший ответ

Вы должны использовать data[i].Month (-1, если data[i].Month идет от 1 до 12) в качестве индекса массива monthNames.

Заменить это:

month.push(data[i].Month);

По:

month.push(monthNames[data[i].Month - 1]);
1
Remy Cilia 8 Янв 2017 в 04:59

Вы правильно написали цикл for для итерации по объектам в массиве данных, однако, чтобы получить название месяца, вы не можете просто проиндексировать исходный массив данных. Исходный массив данных не содержит названия месяца. Вы должны проиндексировать массив monthNames следующим образом:

for(var i in data) {
     month.push(monthNames[data[i].Month - 1]); 
}

Альтернативное решение с использованием метода массива Map и функции стрелок немного более кратким.

data.map((x) => month.push(monthNames[x.Month - 1])); 
1
Ben Holland 8 Янв 2017 в 05:10

Метод создания массива объектов имеет смысл, особенно если вы думаете, что вам могут понадобиться короткие и длинные названия месяцев:

Var monthNames = [{longName: "Январь", shortName: "Ян"}, ..., {longName: "Декабрь", shortName: "Дек"}];

Вы бы искали месяц как, скажем, monthNames[i].longName для целей вывода.

В противном случае массив строк также будет работать.

Как правило, месяцы варьируются от 0 до 11 ... вам может потребоваться изменить его на один, если у вас 1-12.

1
MIS 8 Янв 2017 в 04:59