如何在联系人数组上映射以产生具有对象和属性的新数组?

时间:2019-12-23 22:03:20

标签: javascript arrays react-native

我正在寻找一个数组的映射,以创建一个具有相关属性的新数组。我已经在手机上成功访问了我的联系人,并希望将数据推送到更有条理的结构中。如何使用电子邮件和电话号码的第一个值(如果存在)映射到Array In以获得Array Out?下面是一个通讯录数组的示例:

数组输入

let arrayIn=  [
    {phoneNumbers:[
        { label: 'work',  number: '+3476859087'},
        { label: 'mobile', number: '+4567893214'}
        ],
        lookupKey:"12345",
        company:"PHONE",firstName:"John",contactType:"person",name:"John Smith",id:"879",
        emails:[
            {email:'johnSmith@gmail.com'}
        ],
        lastName:"Smith",
    },
    {phoneNumbers:[
        { label: 'mobile', number: '+3476859087'},
        { label: 'work', number: '+4567773214'}
        ],
        lookupKey:"890744",
        company:"PHONE",firstName:"Carl",name:"Carl Johnson",id:"879",
        emails:[
            {email:'cjohnsonh@gmail.com'}
        ],
        lastName:"johnson",
    }
    ]

我想得出以下结论: 排列

[
      {name: 'John Smith', phone: 3476859087, email: 'jsmith@gmail.com'},
      {name: 'Carl Johnson', phone: 3476859087, email: 'cJohnson@gmail.com'}
    ]

我已经在数组上映射了一个联系人列表,当我选择每个联系人列表时,我想将其推入状态。我的小吃在这里供参考:https://snack.expo.io/@fauslyfox110/testingreferrals

不想找人为我做零食,只是为了帮助我处理从阵列输入到阵列输出的阵列部分。

有效的答案

let arrayOut = arrayIn.reduce((acc, {name, phoneNumbers, emails}) => {
  return [...acc, {
    'name': name,
    'phone': phoneNumbers[0]['number'].replace('+', ''),
    'email': emails[0].email
  }];
}, []);

console.log(arrayOut);

3 个答案:

答案 0 :(得分:1)

您的数据中出现一些Sytax错误,主要是您使用[],然后分配了属于对象的 key:value 对-我交换了{在这种情况下,[]的{​​1}}

我使用了.reduce()来遍历您的数据并返回所需的数组。我不确定您希望如何处理电话号码,所以我只返回第一个电话

{}

答案 1 :(得分:0)

这澄清吗?

let inputArray = [{name: 1}, {name: 2}]

let outputArray = inputArray.map(inputArrayItem => { return  {name: inputArrayItem.name}; });

console.log(outputArray );

答案 2 :(得分:0)

您的数组输入中有一些语法错误。我没有做映射,而是在for循环中做的,但是看起来像这样。

let arrayIn =   [
    {phoneNumbers:[
        '+3476859087',
        '+4567893214'
        ],
        lookupKey:"12345",
        company:"PHONE",firstName:"John",contactType:"person",name:"John Smith",id:"879",
        emails:[
            'johnSmith@gmail.com'
        ],
        lastName:"Smith",
    },
    {phoneNumbers:[
        '+3476859087',
        '+4567773214'
        ],
        lookupKey:"890744",
        company:"PHONE",firstName:"Carl",name:"Carl Johnson",id:"879",
        emails:[
            'cjohnsonh@gmail.com'
        ],
        lastName:"johnson",
    }
   ]

 let arrayOut = []

 for(let i = 0; i < arrayIn.length; i++){
        let contact = {
        name: arrayIn[i].name,
      phone: arrayIn[i].phoneNumbers[0],
      email: arrayIn[i].emails[0],
    }
    arrayOut.push(contact);
 }

 console.log(arrayOut);

这是我的jsfiddle:https://jsfiddle.net/1brL2cz0/

我没有从电话号码中分离出'+',但是您可以轻松做到。