我正在尝试过滤数组并使用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'
}]
}]
}
答案 0 :(得分:2)
如果您正在使用es6,则不再需要lodash。
contacts.map( ({ id, phonenumbers }) =>
({ id, phonenumbers: phonenumbers.map( ({ value, type }) => ({ value, type }) ) })
);
你得到了你想要的确切输出。