2016-09-19 66 views
0

我試圖來過濾陣列,通過lodash得到一個地址簿中的電話號碼上,該結構是一樣的東西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 }; 
       } 
      ); 

但是當我想要得到的2和第三位person.phoneNumbers [1] .value的,我得到的錯誤時,有沒有第二個電話號碼,是有辦法得到他們沒有指定陣列中的位置? 輸出應該是一個具有聯繫人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' 
    }] 
    }] 
} 

回答

1

如果您使用es6,則不需要lodash。

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

而且您會得到您想要的確切輸出。

+1

你甚至不需要使用ES6來做到這一點。雖然它確實使代碼更短,更好。 – vlaz

+0

的確,它主要是一種語法的東西。此外:IE> 8. –

+0

感謝它更好,而不使用lodash –