2017-03-21 293 views
0

我有对象的嵌套阵列的阵列,其中我需要格式化属性中的每个对象映射整数数组对象

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) 
// [] 

它目前返回一个空数组,我将如何格式化每个日期而不改变格式?

回答

2

既然您正在处理一个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>