将一个数组中的重复对象推送到它们自己的数组中
Pushing duplicate objects from one array into their own arrays
我收到了一组类似于以下内容的数据。
let arr = [
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
]
我希望能够对数组进行排序,并将任何具有匹配日期的对象推送到它们自己的数组中,如下所示
let sortedArr = [
[
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'}
],
[
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'}
],
[
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'}
],
[
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'}
],
[
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
]
[
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'}
],
]
我考虑过对数组执行 map() 或 reduce() 函数,但老实说不知道从哪里开始。
您可以使用 hashmap
按 date
和 return 其值集分组数组,如下所示:
let arr = [
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
];
console.log( mapDates(arr) );
function mapDates(arr){
let map = {};
for(let i = 0; i < arr.length; i++){
if(!map[ arr[i]['date'] ])
map[ arr[i]['date'] ] = [ arr[i] ];
else
map[ arr[i]['date'] ].push(arr[i]);
}
return Object.values(map);
}
我收到了一组类似于以下内容的数据。
let arr = [
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
]
我希望能够对数组进行排序,并将任何具有匹配日期的对象推送到它们自己的数组中,如下所示
let sortedArr = [
[
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'}
],
[
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'}
],
[
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'}
],
[
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'}
],
[
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
]
[
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'}
],
]
我考虑过对数组执行 map() 或 reduce() 函数,但老实说不知道从哪里开始。
您可以使用 hashmap
按 date
和 return 其值集分组数组,如下所示:
let arr = [
{date: "2018-02-02 00:00:00", tabsID: '154', hours: '3'},
{date: "2018-02-05 00:00:00", tabsID: '29', hours: '5'},
{date: "2018-02-06 00:00:00", tabsID: '154', hours: '4'},
{date: "2018-02-06 00:00:00", tabsID: '29', hours: '6'},
{date: "2018-02-09 00:00:00", tabsID: '154', hours: '9'},
{date: "2018-02-10 00:00:00", tabsID: '100', hours: '7'},
{date: "2018-02-10 00:00:00", tabsID: '129', hours: '2'},
{date: "2018-02-12 00:00:00", tabsID: '100', hours: '3'},
];
console.log( mapDates(arr) );
function mapDates(arr){
let map = {};
for(let i = 0; i < arr.length; i++){
if(!map[ arr[i]['date'] ])
map[ arr[i]['date'] ] = [ arr[i] ];
else
map[ arr[i]['date'] ].push(arr[i]);
}
return Object.values(map);
}