我正在尝试过滤数组并使用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 }) ) })
);
您会得到所需的确切输出。