UNPKG

devextreme

Version:

JavaScript/TypeScript Component Suite for Responsive Web Development

95 lines (93 loc) 2.67 kB
/** * 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/ */ "use strict"; 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 }