У меня есть массив объектов. За каждым gateType:entry
должен следовать объект gateType:exit
.создание массива, который содержит отсутствующие объекты
Проблема заключается в некотором объекте ввода, а некоторые объекты выхода отсутствуют/пропускаются. Мне нужно создать массив объектов с недостающими объектами.
[{
"dateTime": "2016-01-28 15:18:26",
"gateType": "entry",
}, {
"dateTime": "2016-01-28 15:18:27",
"gateType": "exit",
}, {
"dateTime": "2016-01-28 15:19:26",
"gateType": "entry",
}, {
"dateTime": "2016-01-28 15:19:27",
"gateType": "exit",
}, {
"dateTime": "2016-01-28 15:20:26",
"gateType": "entry",
},
// here is the exit object is missing for above
{
"dateTime": "2016-01-28 15:21:25",
"gateType": "entry",
}, {
"dateTime": "2016-01-28 15:21:26",
"gateType": "exit",
}, {
"dateTime": "2016-01-28 15:22:25",
"gateType": "entry",
}, {
"dateTime": "2016-01-28 15:22:26",
"gateType": "exit",
},
// here is the entry object is missing for below
{
"dateTime": "2016-01-28 15:23:26",
"gateType": "exit",
}]
Каждый entry
должно сопровождаться exit
. Но, как вы видите, некоторые объекты ввода или выхода не существуют.
Раствор для вышеприведенного примера является:
[{
"dateTime": "2016-01-28 15:20:26",
"gateType": "exit",
},{
"dateTime": "2016-01-28 15:23:26",
"gateType": "enty",
}]
Мое решение было это, но он не работает, как я ожидал:
function detectMissingOnes(rows) {
var missings = [];
var current = null;
rows.forEach(function (key, index) {
if (index == 0) {
if(key.gateType == "exit"){
var resultDate = moment(key.dateTime);
resultDate = resultDate.subtract(1, 'seconds').format("YYYY-MM-DD HH:mm:ss");
missings.push({
dateTime: resultDate,
gateNumber: key.gateNumber,
gateType: "entry",
personId: key.personId,
fix: 1
});
}
current = key;
return true;
}
if (current.gateType == key.gateType) {
var type = key.gateType == "entry" ? "exit" : "entry";
var resultDate = moment(current.dateTime);
if(type == "entry"){
resultDate = resultDate.subtract(1, 'seconds').format("YYYY-MM-DD HH:mm:ss");
}else {
resultDate = resultDate.add(1, 'seconds').format("YYYY-MM-DD HH:mm:ss");
}
missings.push({
dateTime: resultDate,
gateNumber: current.gateNumber,
gateType: type,
personId: current.personId,
fix: 1
});
}
current = key;
});
return missings;
}
Не могли бы вы помочь мне написать алгоритм с или без lodash?
Большое спасибо, работает как шарм! – serkan
Мне нужно внести небольшие изменения, но не уверен, как это сделать. Мне нужно учитывать свойство «personId». Мне нужно проверить, имеют ли объекты одинаковые идентификаторы personId. Не могли бы вы мне помочь? большое спасибо. – serkan
Не могли бы вы проверить эти данные http://pastebin.com/ECry1T0f? Кажется, он всегда пропускает два объекта. Если функция выполняется во второй раз, она также исправляет эти два элемента. – serkan