Как отсортировать фамилии, отформатировать номера телефонов и вернуть строку, содержащую значения из массива объектов?

Я работаю над этой игрушечной проблемой в JS, но я часами застрял в том, как действовать дальше.

Определите конструктор объекта People, который содержит значения: полное имя, адрес электронной почты, номер телефона, возраст и пол.

Создайте четырех новых людей (имена и значения зависят от вас) и назначьте их массиву.

  • Номер телефона и возраст должны быть цифрами.
  • Хотя бы одно полное имя должно содержать отчество.

Затем сделайте следующее:

1- Разделите значения полного имени на массив. 2- Отформатируйте номер телефона: 1(123)456-7898 3- Отсортируйте контакты по фамилии. 4- Создайте строку каждого объекта и запишите ее в консоль следующим образом:

Г-н/Г-жа фамилия, имя | электронная почта | телефонный номер

a: Интервал должен быть одинаковым для всех значений. | b: Титул, имя и номер телефона следует оставить по ширине. | c: Электронная почта должна быть выровнена по правому краю.

Ниже мой код. Я сделал функцию, которая может создать массив со значениями имен, отформатировал номера телефонов в массив, отсортировал массив имен по фамилии, но я не могу понять логику, чтобы связать все это обратно, чтобы вернуть строку . Я считаю, что для гендерного значения требуется оператор if. Может ли кто-нибудь помочь с логикой, чтобы ответить на этот вопрос? Вот мой код. Спасибо за чтение.

function People(name, email, age, phone, gender){
  this.fullname = name;
  this.email = email;
  this.age = age;
  this.phone = phone;
  this.gender = gender;
}

// Assigning four new people obj to an array

var arr = [
  new People("John Doe", "[email protected]", 32, 15555555555, "male"),
  new People("Jenny Craig", "[email protected]", 28, 19255555555,   "female"),
  new People("Bill Clinton", "[email protected]", 59, 13105551234, "male"),
  new People("George Washington Bush", "[email protected]", 63, 15103456432, "male")
];


// Loop through array to access each obj fullname prop to split into array.

function nmStr(arr){
  var name = [];
  var num = [];
  arr.forEach(function(elem){
    name.push(elem.fullname.split(" ").reverse());
  });
  name.sort();
  arr.forEach(function(numb){
    numb.push(numb.phone.toString().substr(0, 1) + "(" +
    numb.phone.toString().substr(1, 3) + ")" +
    numb.phone.toString().substr(4, 3) + "-" +
    numb.phone.toString().substr(7, 4));
  });
  // console.log(name);
  // console.log(num);
}

nmStr(arr);

person philthy    schedule 06.04.2016    source источник
comment
Дополнительный ) в numb.phone.toString().substr(7, 4));?   -  person guest271314    schedule 07.04.2016


Ответы (1)


Хорошо, я попробовал, я пошел немного другим путем, чем вы, и я не делал окончательного форматирования, но я думаю, что это так. На последнем шаге, чтобы превратить его в строку, я просто перебираю конечный объект и создаю строку, складывая все свойства вместе:

JSBin...Нажмите, он автоматически зарегистрирует мои результаты

Вот мой код для управления массивом:

function phonenumbermaker(num) {
  var str = num.toString();
  var re = /\(?(\d{4})\)?[- ]?(\d{3})[- ]?(\d{4})/g; 
  var subst = '$1 $2-$3'; 
  var result = str.replace(re, subst); 
  return  result.substring(0, 1) + '(' +  result.substring(1,4) + ')' + result.substring(4);
}
var updated = arr.map(function(person) {
  var nameArray = person.fullname.split(' ');
  return {
    gender: (person.gender === 'male' ? 'Mr.' : 'Mrs.'),
    lastname: nameArray.pop(),
    restof : nameArray.join(' '),
    email: person.email,
    phone: phonenumbermaker(person.phone)
  };
}).sort(function(a, b) {
    if (a.lastname > b.lastname) return 1;
    if (a.lastname < b.lastname) return -1;
    return 0;
}).map(function(p) {
  return p.gender + ' ' + p.lastname + ', ' +  p.restof + ' | ' + p.email + ' | ' + p.phone; 
});

// this part is just to log:
updated.forEach(function(finalThing){

  console.log(finalThing);
});
person omarjmh    schedule 07.04.2016
comment
Я сделал это только потому, что это казалось классной проблемой. Возможно, можно было бы и дальше чистить... - person omarjmh; 07.04.2016
comment
небольшое исправление: person.gender = 'мужской' - используйте === - person Ananthaprakash; 07.04.2016
comment
function(a, b) { return a.lastname > b.lastname; } не работает - person Bergi; 07.04.2016
comment
@Omarjmh Что это значит? var subst = '$1 $2-$3'; Я никогда раньше не использовал такой код. - person philthy; 07.04.2016
comment
его часть регулярных выражений. Я не думаю, что вам это нужно здесь, если синтаксический анализ вашего номера телефона работает с этим. - person omarjmh; 07.04.2016
comment
@Bergi, спасибо за эту ссылку, я обновил код ... и книга пометила эту ссылку - person omarjmh; 07.04.2016