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: '',
    },
  },
];