我有一个JSON对象,它来自一个AJAX请求,由接口SuccesResponse
表示
interface SuccessResponse {
dates: Dates;
}
哪里:
interface Dates {
items: DatesItemResponse[];
}
interface DatesItemResponse {
date: string;
}
一个DatesItemResponse
看起来像这样:
{
"date": "2018-06-25T00:00:00"
}
我需要使用moment.js
格式化所有这些日期作为MM-DD
,所以在上面的例子中它应该是06-25
,但我不知道如何让moment.js
解析所有日期而不是单个日期。
根据你提到的接口,你的响应看起来像这样:
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
因此,您需要迭代items
并解析date
中的所有creating a moment object with each date string属性,然后在具有所需格式的那些时刻对象上调用format
,在这种情况下为MM-DD
。
如果你想在一个数组中获取所有日期,你可以使用Array.prototype.map()
并执行以下操作:
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
console.log(response.dates.items.map(item => moment(item.date).format('MM-DD')));
<script src="http://momentjs.com/downloads/moment.min.js"></script>
但是,如果你想获得最初的完全相同的对象,但原始的日期字符串被格式化的那些替换,那么Array.prototype.forEach()
可能是更好的选择(虽然从技术上讲,map
也可以):
const response = {
dates: {
items: [{
date: '2018-06-25T00:00:00'
}, {
date: '2018-06-26T00:00:00'
}, {
date: '2018-06-27T00:00:00'
}]
}
};
response.dates.items.forEach(item => {
item.date = moment(item.date).format('MM-DD');
});
console.log(response);
<script src="http://momentjs.com/downloads/moment.min.js"></script>