#javascript #arrays
#javascript #массивы
Вопрос:
У меня здесь МЕСЯЦЫ с января по декабрь, и у меня есть пустой массив и МАССИВ ОБЪЕКТОВ
let person = [
{
event: "Birthday",
date: "May",
count: 2
},
{
event: "Birthday",
date: "Jun",
count: 3
},
{
event: "Birthday",
date: "Aug",
count: 14
},
{
event: "Birthday",
date: "Oct",
count: 20
}
];
let birthday = []
Я использую цикл for для распределения «count» в пустой массив
for(let j = 0; j < person.length; j ){
let event = person[j].event;
let date = person[j].date;
let count = person[j].count;
for(let i = 0; i < MONTHS.length; i ){
if(date == MONTHS[i]){
bday.push(count);
MONTHS.splice(0, i);
break;
}
else{
bday.push(0);
}
}
}
Но вместо этого я получаю неверный вывод:
[0, 0, 0, 0, 2, 3, 0, 14, 0, 20, 0, 0] Размер массива должен быть 12
Я получил это (который превышает индекс, и значения, которые я вставляю, имеют неправильный индекс):
[0, 0, 0, 0, 2, 0, 3, 0, 0, 14, 0, 0, 20]
Я использую данные PERSON только для тестирования кода, но на самом деле я использую данные из MYSQL
Комментарии:
1. Чего это
splice
пытается достичь? не то, что вы думаете2. 12 результатов указывают как количество Дней рождения в каждом месяце. Единственные месяцы, в которых отмечается День рождения, — это только май, июнь, август, октябрь. Остальные должны быть равны нулю.
3. Проверяйте массив MONTHS после каждой итерации, после первой итерации может все еще быть там, хотя этого не должно быть. Второй аргумент для
splice
не является конечным индексом вашего подмассива, но указывает, сколько элементов вы хотите удалить из этого массива ( w3schools.com/jsref/jsref_splice.asp ) и поскольку ваш индекс начинается с 0, вы должны добавить к нему единицу при передаче его в splice.
Ответ №1:
Вы могли бы взять объект для получения значений месяца в качестве индекса и обновить birthday
массив.
let person = [{ event: "Birthday", date: "May", count: 2 }, { event: "Birthday", date: "Jun", count: 3 }, { event: "Birthday", date: "Aug", count: 14 }, { event: "Birthday", date: "Oct", count: 20 }],
months = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 },
birthday = Array.from(Object.keys(months).fill(0));
person.forEach(({ date, count }) => birthday[months[date]] = count);
console.log(...birthday);