devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
113 lines (110 loc) • 4.18 kB
JavaScript
/**
* DevExtreme (cjs/core/utils/array.js)
* Version: 23.2.6
* Build date: Wed May 01 2024
*
* Copyright (c) 2012 - 2024 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
exports.wrapToArray = exports.removeDuplicates = exports.normalizeIndexes = exports.groupBy = exports.getUniqueValues = exports.getIntersection = void 0;
var _type = require("./type");
var _object = require("./object");
var _config = _interopRequireDefault(require("../config"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
}
}
function createOccurrenceMap(array) {
return array.reduce((map, value) => {
var _map$get;
const count = (null !== (_map$get = map.get(value)) && void 0 !== _map$get ? _map$get : 0) + 1;
map.set(value, count);
return map
}, new Map)
}
const wrapToArray = function(item) {
return Array.isArray(item) ? item : [item]
};
exports.wrapToArray = wrapToArray;
const getUniqueValues = function(values) {
return [...new Set(values)]
};
exports.getUniqueValues = getUniqueValues;
const getIntersection = function(firstArray, secondArray) {
const toRemoveMap = createOccurrenceMap(secondArray);
return firstArray.filter(value => {
const occurrencesCount = toRemoveMap.get(value);
occurrencesCount && toRemoveMap.set(value, occurrencesCount - 1);
return occurrencesCount
})
};
exports.getIntersection = getIntersection;
const removeDuplicates = function() {
let from = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
let toRemove = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
const toRemoveMap = createOccurrenceMap(toRemove);
return from.filter(value => {
const occurrencesCount = toRemoveMap.get(value);
occurrencesCount && toRemoveMap.set(value, occurrencesCount - 1);
return !occurrencesCount
})
};
exports.removeDuplicates = removeDuplicates;
const normalizeIndexes = function(items, indexPropName, currentItem, needIndexCallback) {
const indexedItems = {};
const {
useLegacyVisibleIndex: useLegacyVisibleIndex
} = (0, _config.default)();
let currentIndex = 0;
const shouldUpdateIndex = item => !(0, _type.isDefined)(item[indexPropName]) && (!needIndexCallback || needIndexCallback(item));
items.forEach(item => {
const index = item[indexPropName];
if (index >= 0) {
indexedItems[index] = indexedItems[index] || [];
if (item === currentItem) {
indexedItems[index].unshift(item)
} else {
indexedItems[index].push(item)
}
} else {
item[indexPropName] = void 0
}
});
if (!useLegacyVisibleIndex) {
items.forEach(item => {
if (shouldUpdateIndex(item)) {
while (indexedItems[currentIndex]) {
currentIndex++
}
indexedItems[currentIndex] = [item];
currentIndex++
}
})
}
currentIndex = 0;
(0, _object.orderEach)(indexedItems, (function(index, items) {
items.forEach(item => {
if (index >= 0) {
item[indexPropName] = currentIndex++
}
})
}));
if (useLegacyVisibleIndex) {
items.forEach(item => {
if (shouldUpdateIndex(item)) {
item[indexPropName] = currentIndex++
}
})
}
};
exports.normalizeIndexes = normalizeIndexes;
const groupBy = (array, getGroupName) => array.reduce((groupedResult, item) => {
var _groupedResult$groupN;
const groupName = getGroupName(item);
groupedResult[groupName] = null !== (_groupedResult$groupN = groupedResult[groupName]) && void 0 !== _groupedResult$groupN ? _groupedResult$groupN : [];
groupedResult[groupName].push(item);
return groupedResult
}, {});
exports.groupBy = groupBy;