Javascript 如何对姓氏进行排序、设置电话号码的格式,以及返回包含对象数组中的值的字符串?

Javascript 如何对姓氏进行排序、设置电话号码的格式,以及返回包含对象数组中的值的字符串?,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我正在用JS解决这个玩具问题,但我已经被困在如何继续的问题上好几个小时了 定义包含以下值的对象构造函数:full 姓名、电子邮件、电话号码、年龄和性别 创建四个新人员(姓名和价值观由您决定)并分配给他们 到一个数组 电话号码和年龄应该是数字 至少一个全名应包含中间名 然后执行以下操作: 1-将全名值拆分为数组。2-格式化手机 号码:1(123)456-7898 3-按姓氏排序联系人。4-做一根绳子 并将其记录到控制台,如下所示: 先生/女士姓氏、姓氏、电子邮件、电话号码 答:所有值的间距应相

我正在用JS解决这个玩具问题,但我已经被困在如何继续的问题上好几个小时了

定义包含以下值的对象构造函数:full 姓名、电子邮件、电话号码、年龄和性别

创建四个新人员(姓名和价值观由您决定)并分配给他们 到一个数组

  • 电话号码和年龄应该是数字
  • 至少一个全名应包含中间名
然后执行以下操作:

1-将全名值拆分为数组。2-格式化手机 号码:1(123)456-7898 3-按姓氏排序联系人。4-做一根绳子 并将其记录到控制台,如下所示:

先生/女士姓氏、姓氏、电子邮件、电话号码

答:所有值的间距应相同并适合所有值标题、姓名和电话号码应左对齐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", "jdoe@aol.com", 32, 15555555555, "male"),
  new People("Jenny Craig", "jcraig@netzero.com", 28, 19255555555,   "female"),
  new People("Bill Clinton", "bill.clinton@pres.gov", 59, 13105551234, "male"),
  new People("George Washington Bush", "gw.bush@gmail.com", 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);

好吧,我尝试了一下,我的方式和你有点不同,我没有做最后的格式化,但我相信我已经做到了。在将其转换为字符串的最后一步中,我只需在最后一个对象上循环,并通过将所有属性添加在一起生成一个字符串:

杰宾

下面是我操作数组的代码:

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);
});
函数phonenumbermaker(num){
var str=num.toString();
var re=/\(?(\d{4})\)?[-](\d{3})[-]?(\d{4})/g;
var subst='$1$2-$3';
var结果=str.replace(re,subst);
返回result.substring(0,1)+'('+result.substring(1,4)+')'+result.substring(4);
}
var更新=arr.map(功能(人员){
var nameArray=person.fullname.split(“”);
返回{
性别:(person.gender==‘男’?‘先生’:‘太太’),
lastname:nameArray.pop(),
restof:nameArray.join(“”),
电子邮件:person.email,
电话:phonenumbermaker(person.phone)
};
}).排序(功能(a、b){
如果(a.lastname>b.lastname)返回1;
如果(a.lastname
是一个额外的
位于
numb.phone.toString().substr(7,4))?我这么做只是因为这看起来是个很酷的问题。可以再进一步清理一下吗?几乎没有更正:person.gender='male'-use==
函数(a,b){返回a.lastname>b.lastname;}
@Omarjmh这是什么意思<代码>var subst='$1$2-$3'我以前从未使用过这样的代码。@Bergi,谢谢你的链接,我已经更新了代码。。。这本书标记了这种联系