我一直试图通过将相同的数据组合在一起来最小化我的代码 多维数组。
这是我的数组:
data:[
0:{
id:"1"
date:"2017-11-27"
type:"Meeting"
log_in:"06:30:00"
log_out:"11:50:00"
}
1:{
id:"1"
date:"2017-11-27"
type:"Lunch"
log_in:"12:00:00"
log_out:"01:00:00"
}
2:{
id:"1"
date:"2017-11-27"
type:"Seminar"
log_in:"1:15:00"
log_out:"03:05:00"
}
3:{
id:"1"
date:"2017-11-28"
type:"Lunch"
log_in:"12:00:00"
log_out:"01:00:00"
}
4:{
id:"1"
date:"2017-12-28"
type:"Out of the Office"
log_in:"03:00:00"
log_out:"05:00:00"
} ]
我一直试图将我的数组转换为:
new_data:[
0:{
id:"1"
date:"2017-11-27"
logs:[
{type:"Meeting",log_in:"06:30:00",log_out:"11:50:00"},
{type:"Lunch",log_in:"12:00:00",log_out:"01:00:00"},
{type:"Seminar",log_in:"1:15:00",log_out:"03:05:00"}
]
}
1:{
id:"1"
date:"2017-11-28"
logs:[
{type:"Lunch",log_in:"12:00:00",log_out:"01:00:00"},
{type:"Out of the Office",log_in:"03:00:00",log_out:"05:00:00"}
]
}
]
我试过这个代码是link,但是我无法操纵它 好。我只是在该链接中使用了正确的答案。
答案 0 :(得分:0)
根据您的数据判断,您希望按日期分组日志。考虑到这一点,您首先要通过map
创建一个新数组。然后在每次迭代中,通过filter()
获取日期等于当前对象的所有对象。最后,为当前对象log
属性创建另一个数组,其中包含您问题中描述的对象。
const data = [
{
id: "1",
date: "2017-11-27",
type: "Meeting",
log_in: "06:30:00",
log_out: "11:50:00"
},
{
id: "1",
date: "2017-11-27",
type: "Lunch",
log_in: "12:00:00",
log_out: "01:00:00"
},
{
id: "1",
date: "2017-11-27",
type: "Seminar",
log_in: "1:15:00",
log_out: "03:05:00",
},
{
id: "1",
date: "2017-11-28",
type: "Lunch",
log_in: "12:00:00",
log_out: "01:00:00"
},
{
id: "1",
date: "2017-12-28",
type: "Out of the Office",
log_in: "03:00:00",
log_out: "05:00:00"
}
];
const newData = data.map(obj => {
const { id, date } = obj;
const currObj = { id, date };
currObj['logs'] = data.filter(dataObj => {
return date === dataObj['date'];
}).map(obj => {
const {type, log_in, log_out } = obj;
return { type, log_in, log_out };
});
return currObj;
});
console.log(newData);

答案 1 :(得分:0)
这是我的解决方案。如果具有id和date的元素已经存在,则使用reduce迭代初始数组的元素并将事件添加到日志中,否则创建新元素。
const data = [
{
id:"1",
date:"2017-11-27",
type:"Meeting",
log_in:"06:30:00",
log_out:"11:50:00"
},
{
id:"1",
date:"2017-11-27",
type:"Lunch",
log_in:"12:00:00",
log_out:"01:00:00"
},
{
id:"1",
date:"2017-11-27",
type:"Seminar",
log_in:"1:15:00",
log_out:"03:05:00"
},
{
id:"1",
date:"2017-11-28",
type:"Lunch",
log_in:"12:00:00",
log_out:"01:00:00"
},
{
id:"1",
date:"2017-12-28",
type:"Out of the Office",
log_in:"03:00:00",
log_out:"05:00:00"
} ];
const result = data.reduce((acc, elt) => {
const {id, date, type: typeValue, log_in, log_out} = elt;
// Check if the element exists
const existingEltIndex = acc.findIndex(e =>
e.id === elt.id && e.date === elt.date);
const newEvent = {type: typeValue, log_in, log_out};
if (existingEltIndex < 0) { // new element
const newElement = {
id,
date,
logs: [newEvent]
};
return [...acc, newElement];
} else { // Existing element
acc[existingEltIndex].logs.push(newEvent);
return acc;
}
}, []);
console.log(result);
&#13;
答案 2 :(得分:0)
使用for loop的简单解决方案,
user@host ~/Desktop $ ./a.out myFile.txt
[DEBUG] myFile
[DEBUG] 'm' == 'm'
[DEBUG] 'y' == 'y'
[DEBUG] 'F' == 'F'
[DEBUG] 'i' == 'i'
[DEBUG] 'l' == 'l'
[DEBUG] 'e' == 'e'
[DEBUG] equal
[DEBUG] ret_val: 0
[DEBUG] 'myFile'
[ERR] Could not read file myFile.
user@host ~/Desktop $