Javascript 有没有更简洁的方法来变换一组对象
我试图转换一个数组,但只更改了其中一个值。有没有更整洁的方法 我已经附上了我尝试过的代码。这是可行的,但是我只是在为每个用户更改联系人对象的数量,所以通过其他值创建一个新的格式化数组感觉有点多余。我如何在不检查所有内容的情况下仅替换联系人号码Javascript 有没有更简洁的方法来变换一组对象,javascript,arrays,vue.js,Javascript,Arrays,Vue.js,我试图转换一个数组,但只更改了其中一个值。有没有更整洁的方法 我已经附上了我尝试过的代码。这是可行的,但是我只是在为每个用户更改联系人对象的数量,所以通过其他值创建一个新的格式化数组感觉有点多余。我如何在不检查所有内容的情况下仅替换联系人号码 const users = [ { id: "1", name: { givenNames: 'SpongeBob', last: 'SquarePants', }, contact: {
const users = [
{
id: "1",
name: {
givenNames: 'SpongeBob',
last: 'SquarePants',
},
contact: {
email: '',
phone: '+1 123-1231234'
},
},
{
id: "2",
name: {
givenNames: 'Patrick',
last: 'Star',
},
contact: {
email: 'test2@test.com',
phone: '+1 123-123-1234',
},
},
{
id: "3",
name: {
givenNames: 'Eugene Harold',
last: 'Krabs',
},
contact: {
email: 'test3@test.com',
phone: '',
},
},
];
我的代码:
guestList() {
const formattedArray = this.getSelectedGuests.map(user => {
var rObj = {};
rObj.id = user.id;
rObj.name = user.name;
rObj.contact = {
email: user.contact.email,
phone: user.contact.phone.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ''),
};
return rObj;
});
return formattedArray;
}
好的,只要不使用公开不可变对象实现的库,就必须编写这种代码。根据您可以访问的JS方言,您可以编写稍短的代码,但buld仍然存在:
guestList(){
返回此.getSelectedGuests.map(用户=>({
user.id,
user.name,
联系人:{
user.contact.email,
电话:user.contact.phone.replace(/[&\/\\\\\\\\\,+()$~%.':*?{}]/g',),
}
}));
}
如果你想使用不变性,我强烈建议你看看(可能是扩散最多的那个)或(扩散少很多,但我非常喜欢)这样的东西。你不能避免访问每个用户,因为你必须更改每个用户的
联系人
属性
我只是为每个用户更改联系人对象的编号,以便
通过其他每一项价值创造,感觉有点多余
一个新的格式化数组
可以使用复制对象属性,而无需显式复制它们
我还向正则表达式中添加了连字符-
和空格字符\s
,以获得所需的输出
const users=[{id:“1”,姓名:{givenNames:'海绵宝宝',last:'方形裤',},联系人:{email:'',电话:'+1123-1234'},},{id:“2”,姓名:{givenNames:'帕特里克',last:'明星',},联系人:{email:'test2@test.com,电话:“+1123-123-1234”,},{id:“3”,姓名:{givenNames:“Eugene Harold”,last:“Krabs”,},联系方式:{电子邮件:'test3@test.com“,电话:”,},}];
让结果=users.map(user=>({
…用户,
联系人:{
…user.contact,
“phone”:user.contact.phone.replace(/[&\/\\\\\\\,+()$~%.”:*?{}-\s]/g',)
}
}));
console.log(result);
因为您只需要更改联系人
中的属性,所以可以使用with从对象的其余部分提取联系人
现在,您可以将对象的其余部分放入新对象中,创建一个新的联系人
属性,将原始内容
的内容分散到其中,并覆盖电话
属性
功能访客列表(getSelectedGuests){
返回getSelectedGuests.map(({contact,…rest})=>({
休息
联系人:{
…联系,
电话:contact.phone.replace(/[&\/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,
}
}));
}
const users=[{“id”:“1”,“name”:{“givenNames”:“SpongeBob”,“last”:“SquarePants”},“contact”:{“email”:“phone”:“+1123-1231234”},{“id”:“2”,“name”:{“givenNames”:“Patrick”,“last”:“Star”},“contact”:{“email”:test2@test.com“,”电话:“+1123-123-1234”},{“id:”3“,”姓名:{“givenNames:”Eugene Harold“,”last:”Krabs“},,”联系人:{“电子邮件”:”test3@test.com","电话:“}}}];
const result=guestList(用户);
console.log(result);
读取:您可以使用来复制对象属性,而无需显式复制它们。
const users = [
{
id: "1",
name: {
givenNames: 'SpongeBob',
last: 'SquarePants',
},
contact: {
email: '',
phone: '11231231234'
},
},
{
id: "2",
name: {
givenNames: 'Patrick',
last: 'Star',
},
contact: {
email: 'test2@test.com',
phone: '11231231234',
},
},
{
id: "3",
name: {
givenNames: 'Eugene Harold',
last: 'Krabs',
},
contact: {
email: 'test3@test.com',
phone: '',
},
},
];