我正在尝试过滤数组并使用lodash从通讯录中获取电话号码,其结构类似于

var obj = {
  'contacts': [{
    'id': 1,
    'displayName': 'John Doe',
    'phonenumbers': [{
      'id': '1',
      'type': 'mobile',
      "pref":false,
      'value': '555-555'
    }, {
      'id': '2',
      'type': 'mobile',
      "pref":false,
      'value': '555-554'
    }]
  }, {
    'id': 2,
    'displayName': 'Jane Doe',
    'phonenumbers': [{
      'id': '1',
      'type': 'mobile',
      "pref":false,
      'value': '555-557'
    }]
  }]
}


我可以尝试通过以下方式联系电话号码:

        lodash.map(
                contacts,
                function(person) {
                    return { id: person.id,
                        displayName: person.displayName,
                        phoneNumbers: [
                            {
                                number: person.phoneNumbers[0].value,
                                type: person.phoneNumbers[0].type}
                        ],
                        photos: person.photos };
                }
            );


但是,当我想使用person.phoneNumbers [1] .value获取2和3时,没有第二个电话号码时会出错,有没有一种方法可以在不指定数组位置的情况下获取它们?
输出应该是一个包含联系人ID以及电话号码和类型的新数组。

var ouptput= {
  'contacts': [{
    'id': 1,
    'phonenumbers': [{
      'type': 'mobile',
      'value': '555-555'
    }, {
      'type': 'mobile',
      'value': '555-554'
    }]
  }, {
    'id': 2,
    'phonenumbers': [{
      'type': 'mobile',
      'value': '555-557'
    }]
  }]
}

最佳答案

如果您使用的是es6,则不再需要lodash。

contacts.map( ({ id, phonenumbers }) =>
  ({ id, phonenumbers: phonenumbers.map( ({ value, type }) => ({ value, type }) ) })
);


您会得到所需的确切输出。

10-04 22:46
查看更多