【问题标题】:Mapping an array of integers to an array of objects将整数数组映射到对象数组
【发布时间】:2017-03-21 22:39:34
【问题描述】:

我有一个嵌套的对象数组,我需要在其中格式化每个对象的属性

const myMap =  { 
  '1':
   [ { date: '2016-03-10T00:00:00', location: 'NV' },
     { date: '2016-03-10T00:00:00', location: 'WV' },
     { date: '2016-03-10T00:00:00', location: 'CA' } ],
  '2':
   [ { date: '2016-03-10T00:00:00', location: 'NJ' },
     { date: '2016-03-10T00:00:00', location: 'PA' } ],
  '3':
   [ { date: '2016-03-10T00:00:00', location: 'WA' },
     { date: '2016-03-10T00:00:00', location: 'NH' },
     { date: '2016-03-10T00:00:00', location: 'CA' } ] 
}

我目前使用 lodash 和 moment.js 编写此代码

var _ = require('lodash')
var moment = require('moment')

_.map(myMap["date"], (a) => { moment(a).format('DD MMM YYYY') })
console.log(myMap)
// []

它当前返回一个空数组,如何在不更改格式的情况下格式化每个日期?

【问题讨论】:

    标签: javascript arrays multidimensional-array momentjs lodash


    【解决方案1】:

    由于您正在处理Object,并且您想更改其中的值,因此您需要使用 Lodash 的 _.mapValues() 函数(_.map() 用于数组)。

    const myMap =  { 
          '1':
           [ { date: '2016-03-10T00:00:00', location: 'NV' },
             { date: '2016-03-10T00:00:00', location: 'WV' },
             { date: '2016-03-10T00:00:00', location: 'CA' } ],
          '2':
           [ { date: '2016-03-10T00:00:00', location: 'NJ' },
             { date: '2016-03-10T00:00:00', location: 'PA' } ],
          '3':
           [ { date: '2016-03-10T00:00:00', location: 'WA' },
             { date: '2016-03-10T00:00:00', location: 'NH' },
             { date: '2016-03-10T00:00:00', location: 'CA' } ] 
        };
    
        function formatDates(arr) {
          return _.map(arr, formatDate); //map each element of array using formatDate
        }
    
        function formatDate(data) { //copy and format data to new object for mapping
          let formattedData = {};
          formattedData.date = moment(data.date).format('DD MMM YYYY');
          formattedData.location = data.location;
          
          return formattedData;
        }
    
        let result = _.mapValues(myMap, formatDates); //iterate thru each key in object and update values
    
        console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.0/moment.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2020-03-19
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 2011-11-20
      • 2021-04-20
      • 2015-06-25
      相关资源
      最近更新 更多