Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.01.2017, 13:59
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Как добавить в массив объект через конструктор?
Всех приветствую, мне нужно сделать следующее:
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]);
	},

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

Последний раз редактировалось komplekt_17, 22.01.2017 в 14:13.
Ответить с цитированием
  #2 (permalink)  
Старый 22.01.2017, 14:14
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Сообщение от Rise Посмотреть сообщение
komplekt_17, где определено allUsers из строки 16.
пардон, корректная строка такая var arr = this.users;
Сообщение от Rise Посмотреть сообщение
komplekt_17, зачем квадратные скобки в push
должен добавляться многомерный массив

Последний раз редактировалось komplekt_17, 22.01.2017 в 14:16.
Ответить с цитированием
  #3 (permalink)  
Старый 22.01.2017, 14:33
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Сообщение от Rise Посмотреть сообщение
Тогда надо так .push([[user]]) ибо так .push([user]) добавляется одномерный массив.
.push([[user]]) так тоже не работает,
this.users = [], - не перезаписывается с новым значением [[user]]
Ответить с цитированием
  #4 (permalink)  
Старый 22.01.2017, 14:45
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Сообщение от Rise
.push() не перезаписывает
понятно, в моём случае .push() добавляет в пустой массив [] объект [[user]]. А как мне перезаписать this.users с уже новым значением = [[user]]?
Ответить с цитированием
  #5 (permalink)  
Старый 22.01.2017, 14:53
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Сообщение от 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}
.....
Это разве не многомерный массив???
Ответить с цитированием
  #6 (permalink)  
Старый 22.01.2017, 15:04
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Сообщение от Rise
нет, это массив объектов
понятно
Цитата:
А как мне перезаписать this.users с уже новым значением = [[user]]?
ну так как мне тогда сделать-то? это
Ответить с цитированием
  #7 (permalink)  
Старый 22.01.2017, 16:25
Аватар для komplekt_17
Аспирант
Отправить личное сообщение для komplekt_17 Посмотреть профиль Найти все сообщения от komplekt_17
 
Регистрация: 14.01.2017
Сообщений: 46

Благодарю, всё заработало, ещё подскажите мелочь:
this.getAllUsers = function() {
		var arr = this.users;
		var text = '';
		for(var i = 0; i < arr.length; i++){
			for(var j in arr[i]){
				text += arr[i][j]+"\n";
			}
		}
		alert(text);
	}

Как мне вывести значения свойств объектов для каждого в одну строку, у меня сейчас выводится каждое новое значение с новой строки:

Последний раз редактировалось komplekt_17, 22.01.2017 в 16:27.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать JSON объект в mysql таблицу. user71 Node.JS 6 31.07.2016 13:01
Как добавить в обьект или массив динамически новое свойство ? asker Общие вопросы Javascript 2 05.08.2014 17:45
Как преобразовать объект в упорядоченный массив Shitbox2 Общие вопросы Javascript 15 09.06.2014 18:23
Как в шаблоне диррективы узнать массив это или строка? delias Angular.js 1 18.03.2014 07:33
Объект как ассоциативный массив tsigel Общие вопросы Javascript 4 16.05.2013 11:02