Сопоставление массивов со строками

#javascript #arrays

#javascript #массивы

Вопрос:

Я хотел бы написать простой скрипт для отображения поздравлений с днем рождения и именинами. Целью является

1) Получить текущий день. 2) Храните данные сотрудников в массиве. 3) Если имя какого-либо сотрудника совпадает с именем переменной nameday, то напишите в документе поздравление. Обратите внимание, что в день, когда больше имен могут отмечать именины, тогда все сотрудники должны получать поздравления. 4) То же самое для дня рождения, больше людей могут праздновать день рождения в тот же день. 5) Если имя / дата не соответствуют нашему списку сотрудников, тогда ничего не делайте.

Я написал это

 var today = new Date();
var dayMonth = new Date();
var day = today.getDate();
var month = today.getMonth() 1;
var year = today.getFullYear();

today = day  '. '  month '. '  year;
dayMonth = day  '. '  month '.';

var employees = [
  ["Frank", "Jagger", "6. 10.", "1984"],
  ["Ringo", "Lennon", "6. 10.", "1983"],
  ["John", "Star", "4. 10", "1962"],
  ["Mick", "Sinatra", "4. 10", "1961"]
 ];


var nameday;
var age = employees - year;
var employeesName;

switch (dayMonth) {
  case"6. 10.": nameday = "Frank, Ringo, Steve"; break;
  default: nameday = 0;
}


if (employees === nameday) {
  document.write("'   employeesName   ' and '   employeesName   ' nameday today. Congratulation!")
}

if (dayMonth === nameday) {
  document.write("John Star is '   age   ' tady and Mick Sinatra is '   age   ' today. Congratulation!")
}
  

Я знаю, что конец кода неверен, но как я могу получить правильные данные из массива? Как я могу получить доступ ко всем первым именам, а затем сопоставить их с array?

codepen http://codepen.io/anon/pen/rrpRmG?editors=0012

Ответ №1:

Я бы преобразовал ваш массив сотрудников в объект, который содержит массив сотрудников на каждый день.

Затем вы можете получить список сотрудников, у которых есть день рождения, получив реквизит даты в этом объекте!

Вот как это работает:

 var employees = [
  ["Test", "Person", "7. 10.", "1234"],
  ["Frank", "Jagger", "6. 10.", "1984"],
  ["Ringo", "Lennon", "6. 10.", "1983"],
  ["John", "Star", "4. 10", "1962"],
  ["Mick", "Sinatra", "4. 10", "1961"]
 ];

// Create birthday overview
var birthdayOverview = employees.reduce(function(obj, employee) {
  var birthday = employee[2];
  obj[birthday] = obj[birthday] || [];
  obj[birthday].push(employee);
  
  return obj;
}, {});

// Find today's birthdays:

var today = new Date();
var currentDay = today.getDate();
var currentMonth = today.getMonth()   1;
var currentDateFormatted = currentDay  '. '  currentMonth '.';

var birthdayToday = birthdayOverview[currentDateFormatted];

console.log(birthdayToday);