我有一個物件陣列:
let arr = [
{date: '2021/01/23', a1: 'text1', a2: 'text2' },
{date: '2021/11/21', a1: 'text1', a2: 'text2' },
{date: '2020/12/22', a1: 'text1', a2: 'text2' },
{date: '2021/12/08', a1: 'text1', a2: 'text2' },
{date: '2020/12/14', a1: 'text1', a2: 'text2' },
{date: '2021/10/25', a1: 'text1', a2: 'text2' },
{date: '2021/12/04', a1: 'text1', a2: 'text2' },
]
如何使用年份過濾每個月的物件陣列,例如:
'December 21' = [
{date: '2021/12/04', a1: 'text1', a2: 'text2' },
{date: '2021/12/08', a1: 'text1', a2: 'text2' }
]
'January 21' = [
{date: '2021/01/23', a1: 'text1', a2: 'text2' }
]
'December 20' = [
{date: '2020/12/22', a1: 'text1', a2: 'text2' }
]
提前致謝!:)
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
// Your input
let arr = [
{date: '2021/01/23', a1: 'text1', a2: 'text2' },
{date: '2021/11/21', a1: 'text1', a2: 'text2' },
{date: '2020/12/22', a1: 'text1', a2: 'text2' },
{date: '2021/12/08', a1: 'text1', a2: 'text2' },
{date: '2020/12/14', a1: 'text1', a2: 'text2' },
{date: '2021/10/25', a1: 'text1', a2: 'text2' },
{date: '2021/12/04', a1: 'text1', a2: 'text2' },
];
// Month dictionary
const monthNames = [ "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" ];
// Get what you want
const result = arr.reduce((acc, el) => {
// Extract year & month from date
const [ year, month ] = el.date.split('/');
// Get label in 'Month YY' format
const label = monthNames[ month - 1] ' ' year.slice(2);
// Add object key to result if necessary
if (!acc[label]) acc[label] = [];
// Save element
acc[label].push(el);
return acc;
}, {});
console.log(result);
參考:Array.prototype.reduce()
uj5u.com熱心網友回復:
我會做這樣的事情:
const filterArr = (month, year) => arr.filter(x => {
const splitDate = x.date.split('/');
return splitDate[0] === year && splitDate[1] === month;
});
// Usage
filterArr("10", "2021");
編輯:如果你想使用月份的名稱試試這個:
const monthNames = ["January", "February", "March", "April", "May", "June", "July",
"August", "September", "October", "November", "December"];
const monthNameToNumber = (month) => (monthNames.indexOf(month) 1)
.toString().padStart(2, '0');
// Usage
monthNameToNumber("December"); // "12"
uj5u.com熱心網友回復:
您可以使用 forEach 方法從陣列中進行迭代并將所有內容保存在一個物件中。像這樣:
let arr = [
{date: '2021/01/23', a1: 'text1', a2: 'text2' },
{date: '2021/11/21', a1: 'text1', a2: 'text2' },
{date: '2020/12/22', a1: 'text1', a2: 'text2' },
{date: '2021/12/08', a1: 'text1', a2: 'text2' },
{date: '2020/12/14', a1: 'text1', a2: 'text2' },
{date: '2021/10/25', a1: 'text1', a2: 'text2' },
{date: '2021/12/04', a1: 'text1', a2: 'text2' },
];
filteredArr = {};
arr.forEach((obj) => {
const newDate = new Date(obj.date);
const stringMonthAndYear = newDate.toLocaleString('default', { month: 'long' }) ' ' newDate.getFullYear();
if (filteredArr[stringMonthAndYear] && filteredArr[stringMonthAndYear].length) {
filteredArr[stringMonthAndYear].push(obj);
} else {
filteredArr[stringMonthAndYear] = [obj];
}
});
console.log(filteredArr);
uj5u.com熱心網友回復:
試試這個
const month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
let arr = [
{ date: '2021/01/23', a1: 'text1', a2: 'text2' },
{ date: '2021/11/21', a1: 'text1', a2: 'text2' },
{ date: '2020/12/22', a1: 'text1', a2: 'text2' },
{ date: '2021/12/08', a1: 'text1', a2: 'text2' },
{ date: '2020/12/14', a1: 'text1', a2: 'text2' },
{ date: '2021/10/25', a1: 'text1', a2: 'text2' },
{ date: '2021/12/04', a1: 'text1', a2: 'text2' },
];
let obj = {};
for (const row of arr) {
const date = new Date(Date.parse(row.date));
let key = `${month[date.getMonth()]} ${date.getFullYear()}`;
if(!obj[key]) obj[key] = [];
obj[key].push(row);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/384547.html
標籤:javascript 数组 目的
