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