Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавить в массив объект через конструктор? (https://javascript.ru/forum/misc/66999-kak-dobavit-v-massiv-obekt-cherez-konstruktor.html)

komplekt_17 22.01.2017 13:59

Как добавить в массив объект через конструктор?
 
Всех приветствую, мне нужно сделать следующее:
1. Создавать новый экземпляр объекта UserList (с пустым свойством-массивом users)
2. Открываться диалог prompt с предложением ввести имя и фамилию пользователя для регистрации (одной строкой через пробел)
3. После нажатия ОК должен создаваться новый экземпляр объекта User с заполнением свойств firstName, lastName и regDate (текущая дата и время)
4. Созданный экземпляр объекта должен сохраняться в свойство-массив users созданного ранее объекта типа UserList (при помощи метода add)
5. Диалог prompt должен повторяться, пока пользователь не нажмет «Отмена»
6. После нажатия «Отмена» выведите на экран (в консоль или при помощи alert) список всех пользователей с именами и датами регистрации (используйте для этого метод getAllUsers)
код пишу такой:
function User(x,y,z){
	this.firstName = x,// имя
	this.lastName = y,// фамилия
	this.regDate = z// дата и время регистрации
}

function UserList(){
	// внутреннее свойство-массив, в которое будут попадать объекты типа User
	this.users = [],
	// метод получает в качестве параметра объект типа User и сохраняет его в массив users
	this.add = function(user) {
		this.users.push([user]);
	},
	// метод возвращает список пользователей из массива users
	this.getAllUsers = function() {
		var arr = this.users;
		for(var i in arr){
			console.log(i + ': ' + arr[i]);
		}
	}
}
var eUser = '';

// циклируем пока кнопка "отмена" НЕ нажата
while(eUser != null){
	eUser = prompt("Введите ваше Имя и Фамилию через пробел","");
	if(eUser != null){
		var nameUser = eUser.split(' ');
		if(nameUser[1] !== undefined){
			var param1 = nameUser[0];
			var param2 = nameUser[1];
			var param3 = getDateNow();
			var newObject = new User(param1,param2,param3);
			var twoObj = new UserList();
			twoObj.add(newObject);
		}
		else{
			alert("Между Имя и Фамилия должен быть пробел");
		}
	}
	else{
		new UserList().getAllUsers();
	}
}

// функция получения текущей даты и времени
function getDateNow(){
	var now = new Date();
	var date = now.getDate();//получаем число месяца
	// получаем месяц
	var month = 'января,февраля,марта,апреля,мая,июня,июля,августа,сентября,октября,ноября,декабря'.split(',');
	var monthWord = month[now.getMonth()];
	var year = now.getFullYear();//получаем год
	//получаем день недели
	var dayWeek = 'воскресенье,понедельник,вторник,среда,четверг,пятница,суббота'.split(',');
	var dayWeekWord = dayWeek[now.getDay()];
	//получаем часы, минуты, секунды
	var hour = now.getHours();
	var minute = now.getMinutes();
	var second = now.getSeconds(); 
	if(hour.length == 1){hour = '0' + hour} 
	if(minute.length == 1){minute = '0' + minute} 
	if(second.length == 1){second = '0' + second}
	var regDate = 'Регистрация: ' + date + ' ' + monthWord + ' ' + year + ' года, ' + hour + ':' + minute + ':' + second;
	return regDate;
}

думаю, затык где-то здесь:
this.add = function(user) {
		this.users.push([user]);
	},

новый объект не добавляется в массив

Rise 22.01.2017 14:11

komplekt_17, зачем квадратные скобки в push и где определено allUsers из строки 16.

komplekt_17 22.01.2017 14:14

Цитата:

Сообщение от Rise (Сообщение 441899)
komplekt_17, где определено allUsers из строки 16.

пардон, корректная строка такая var arr = this.users;
Цитата:

Сообщение от Rise (Сообщение 441899)
komplekt_17, зачем квадратные скобки в push

должен добавляться многомерный массив

Rise 22.01.2017 14:26

Цитата:

Сообщение от komplekt_17 (Сообщение 441901)
должен добавляться многомерный массив

Тогда надо так .push([[user]]) ибо так .push([user]) добавляется одномерный массив.

komplekt_17 22.01.2017 14:33

Цитата:

Сообщение от Rise (Сообщение 441904)
Тогда надо так .push([[user]]) ибо так .push([user]) добавляется одномерный массив.

.push([[user]]) так тоже не работает,
this.users = [], - не перезаписывается с новым значением [[user]]

Rise 22.01.2017 14:40

komplekt_17, .push() не перезаписывает, а добавляет значение в конец массива.

Rise 22.01.2017 14:45

komplekt_17, почитай что такое многомерный массив, о нем речи нет в условии задачи, там речь об этом .push(user).

komplekt_17 22.01.2017 14:45

Цитата:

Сообщение от Rise
.push() не перезаписывает

понятно, в моём случае .push() добавляет в пустой массив [] объект [[user]]. А как мне перезаписать this.users с уже новым значением = [[user]]?

komplekt_17 22.01.2017 14:53

Цитата:

Сообщение от Rise
почитай что такое многомерный массив

у меня должно получиться вот что-то типа этого
arr[0] = User{firstName = name1, lastName = last1, regDate = reg1}
arr[2] = User{firstName = name2, lastName = last2, regDate = reg2}
arr[3] = User{firstName = name3, lastName = last3, regDate = reg3}
.....
Это разве не многомерный массив???

Rise 22.01.2017 14:55

komplekt_17, нет, это массив объектов.


Часовой пояс GMT +3, время: 23:13.