Я использую преобразование lodash, чтобы сгенерировать сообщение об изменении, сравнивая два объекта.Мне нужно определить, был ли элемент удален из массива, и включить его в сообщение об изменении.Как я могу вернуть удаленный элемент обратно в измененный массив?
var lhs = {
"Income": [{
"Id": 1,
"MonthlyIncome": 5000,
"Type": "Base"
},
{
"Id": 2,
"MonthlyIncome": 1000,
"Type": "Overtime"
}
]
};
var rhs = {
"Income": [{
"Id": 1,
"MonthlyIncome": 5000,
"Type": "Base"
},
{
"Id": 0,
"MonthlyIncome": 500,
"Type": "Other"
}
]
};
function difference(base, object) {
function changes(object, base) {
return _.transform(object, function(result, value, key) {
if (!_.isEqual(value, base[key]) || key === 'Id') {
if (!_.isEqual(value, base[key]) && key === "Id") {
//The item at this position has been removed,
//but needs to be include in the change message
//How to push this item onto the array ?
var removedItem = {
Id: base[key],
Action: "remove"
}
}
result[key] =
_.isObject(value) && _.isObject(base[key]) ?
changes(value, base[key]) :
value;
}
});
}
return changes(object, base);
}
var changeMessage = JSON.stringify(difference(lhs, rhs));
console.log(changeMessage);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
Ожидаемый результат для измененияMessage
{
"Income": [
{
"Id": 0,
"MonthlyIncome": 500,
"Type": "Other"
},
{
"Id": 2,
"Action": "remove"
}
]
}