javascript中的数组和数据处理



所以我有一个包含对象的数组,其中包含基本信息,例如:

var data = [{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-15 13:52:43"
},
{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 12:00:00"
},
{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 09:15:05"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 12:10:43"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 10:52:43"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-14 09:52:43"
}
]

如您所见,数组存储每个人的到达时间。同一个人有不同的到达时间,我需要创建一个返回新数组的函数,该数组仅存储每个人的最新到达时间(记录(。为了返回最新的日期,我找到了这个答案,但在这种情况下我真的不知道我应该怎么做,类似的id(或人(出现了几次。我应该如何迭代,这样我才能知道这个time是迈克的到达时间,而不是杰克的到达时间。谢谢。

花了我几分钟,但我想我让它工作了,如果您单击底部的堆栈闪电战并检查控制台日志,您将看到它给出了正确的输出。

var data = [{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-15 13:52:43"
},
{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 12:00:00"
},
{
id: 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 09:15:05"
},
{
id: 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 12:10:43"
},
{
id: 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 10:52:43"
},
{
id: 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-14 09:52:43"
}
]
class timeCompare {
constructor() {}
payload = {}
addEntry({
id,
time,
mobile,
name
}) {
if (!this[id]) {
this.payload[id] = {
'time': time,
'name': name,
'mobile': mobile
}
} else {
var current = this.parseDate(this[id]['time'])
var check = this.parseDate(time)
if (check > current) {
this.payload[id]['time'] = time
}
}
}
parseDate(dateString) {
console.dir({
'test': dateString
})
var d = dateString.substr(0, 10).split('-')
var t = dateString.substr(11, 8)
return Date.parse(`${d[1]}/${d[2]}/${d[0]} ${t}`)
}
}
var control = new timeCompare()
data.forEach(_val => {
control.addEntry(_val)
})
console.log(control)
var output = []
for (let OBJ in control.payload) {
output.push({
id: OBJ,
...control.payload[OBJ]
})
}
console.log(output);

这是一个工作堆栈闪电战

https://stackblitz.com/edit/typescript-3werja

将数据变量传递给此函数以将日期作为新数组获取:

function getTime(dataset){
var set = dataset.map(function(e){
return e.time;
});
return set;
}

然后调用该函数,如下所示:

var timeSet = getTime(data);
let output = data.reduce( (acc, item) => {
let ids = acc.map(j => j.id);
if(ids.includes(item.id)) {
let existingItem = acc.filter( entry => entry.id === item.id);
existingItem.time =  Date.parse(item.time) > Date.parse(existingItem.time) ? 
item.time : existingItem.toLocaleString;
} else {
acc.push(item);
}
return acc;
}, []);

请注意,提供的 JSON 格式不正确,我重新格式化了它,这是完整的代码:

var data = [{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-15 13:52:43"
},
{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 12:00:00"
},
{
"id": 31737,
"mobile": "123456",
"name": "Jack",
"time": "2019-12-14 09:15:05"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 12:10:43"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-15 10:52:43"
},
{
"id": 88991,
"mobile": "123456",
"name": "Mike",
"time": "2019-12-14 09:52:43"
}
];
let output = data.reduce((acc, item) => {
let ids = acc.map(j => j.id);
if (ids.includes(item.id)) {
let existingItem = acc.filter(entry => entry.id === item.id);
existingItem.time = Date.parse(item.time) > Date.parse(existingItem.time) ? item.time : existingItem.toLocaleString;
return acc;
} else {
acc.push(item);
return acc;
}
}, []);
console.log(output);

最新更新