devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
95 lines (93 loc) • 2.67 kB
JavaScript
/**
* DevExtreme (cjs/__internal/scheduler/appointments/utils/get_arrays_diff.js)
* Version: 26.1.3
* Build date: Wed Jun 10 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getArraysDiff = getArraysDiff;
exports.isNeedToUpdateItems = exports.isNeedToRemove = exports.isNeedToAdd = void 0;
const isNeedToRemove = item => item.needToRemove;
exports.isNeedToRemove = isNeedToRemove;
const isNeedToAdd = item => item.needToAdd;
exports.isNeedToAdd = isNeedToAdd;
const isNeedToUpdateItems = item => item.needToUpdateItems;
exports.isNeedToUpdateItems = isNeedToUpdateItems;
function getArraysDiff(a, b, match, equal, itemsLengthEqual) {
const n = a.length;
const m = b.length;
const dp = Array.from({
length: n + 1
}, () => new Array(m + 1).fill(0));
for (let i = 1; i <= n; i += 1) {
const ai = a[i - 1];
for (let j = 1; j <= m; j += 1) {
dp[i][j] = match(ai, b[j - 1]) ? dp[i - 1][j - 1] + 1 : Math.max(dp[i - 1][j], dp[i][j - 1])
}
}
const result = [];
let i = n;
let j = m;
while (i > 0 && j > 0) {
const ai = a[i - 1];
const bj = b[j - 1];
if (match(ai, bj)) {
if (equal(ai, bj)) {
if (!itemsLengthEqual(ai, bj)) {
result.push({
item: bj,
needToUpdateItems: true
})
} else {
result.push({
item: bj
})
}
} else {
result.push({
item: ai,
needToRemove: true
});
result.push({
item: bj,
needToAdd: true
})
}
i -= 1;
j -= 1
} else if (dp[i - 1][j] >= dp[i][j - 1]) {
result.push({
item: ai,
needToRemove: true
});
i -= 1
} else {
result.push({
item: bj,
needToAdd: true
});
j -= 1
}
}
while (i > 0) {
result.push({
item: a[i - 1],
needToRemove: true
});
i -= 1
}
while (j > 0) {
result.push({
item: b[j - 1],
needToAdd: true
});
j -= 1
}
result.reverse();
return result
}