lodash在深层嵌套数组和对象

时间:2016-09-19 09:16:48

标签: javascript 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 };
                }
            );

但是当我想用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'
    }]
  }]
}

1 个答案:

答案 0 :(得分:2)

如果您正在使用es6,则不再需要lodash。

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

你得到了你想要的确切输出。