@cloudcome/utils-core
Version:
cloudcome core utils
130 lines (129 loc) • 3.48 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const type = require("./type.cjs");
function isArrayLike(unknown) {
if (type.isArray(unknown)) return true;
if (type.isObject(unknown)) {
const arrayLike = unknown;
return typeof arrayLike.length === "number" && arrayLike.length >= 0;
}
return false;
}
function arrayPick(array, indexes) {
const indexes2 = [...indexes];
return array.filter((_, i) => {
const index = indexes2.indexOf(i);
if (index === -1) return false;
indexes2.splice(index, 1);
return true;
});
}
function arrayOmit(array, indexes) {
const indexes2 = [...indexes];
return array.filter((_, i) => {
const index = indexes2.indexOf(i);
if (index === -1) return true;
indexes2.splice(index, 1);
return false;
});
}
function arrayEach(array, iterator, reverse = false) {
const _array = [...array];
const length = array.length;
if (reverse) {
for (let i = length - 1; i >= 0; i--) {
if (iterator(_array[i], i) === false) {
break;
}
}
} else {
for (let i = 0; i < length; i++) {
if (iterator(_array[i], i) === false) {
break;
}
}
}
}
async function arrayEachAsync(array, iterator, reverse = false) {
const _array = [...array];
const length = array.length;
if (reverse) {
for (let i = length - 1; i >= 0; i--) {
if (await iterator(_array[i], i) === false) {
break;
}
}
} else {
for (let i = 0; i < length; i++) {
if (await iterator(_array[i], i) === false) {
break;
}
}
}
}
function arrayMove(array, from, to) {
const array2 = [...array];
if (from < 0 || from >= array2.length || to < 0 || to >= array2.length) {
return array2;
}
const item = array2[from];
array2.splice(from, 1);
array2.splice(to, 0, item);
return array2;
}
function arrayDiff(refArray, curArray) {
const buildMap = (arr) => {
const map = /* @__PURE__ */ new Map();
arr.forEach((item, index) => {
const indexes = map.get(item) || [];
indexes.push(index);
map.set(item, indexes);
});
return map;
};
const map1 = buildMap(refArray);
const map2 = buildMap(curArray);
const deletes = /* @__PURE__ */ new Set();
const adds = /* @__PURE__ */ new Set();
const equals = /* @__PURE__ */ new Set();
for (const key of map1.keys()) {
if (map2.has(key)) {
equals.add(key);
} else {
deletes.add(key);
}
}
for (const key of map2.keys()) {
if (!map1.has(key)) {
adds.add(key);
}
}
return {
deletes: [...deletes].map((it) => ({
// biome-ignore lint/style/noNonNullAssertion: <explanation>
refIndexes: map1.get(it),
refValue: it
})),
adds: [...adds].map((it) => ({
// biome-ignore lint/style/noNonNullAssertion: <explanation>
curIndexes: map2.get(it),
curValue: it
})),
equals: [...equals].map((it) => ({
// biome-ignore lint/style/noNonNullAssertion: <explanation>
refIndexes: map1.get(it),
// biome-ignore lint/style/noNonNullAssertion: <explanation>
curIndexes: map2.get(it),
refValue: it,
curValue: it
}))
};
}
exports.arrayDiff = arrayDiff;
exports.arrayEach = arrayEach;
exports.arrayEachAsync = arrayEachAsync;
exports.arrayMove = arrayMove;
exports.arrayOmit = arrayOmit;
exports.arrayPick = arrayPick;
exports.isArrayLike = isArrayLike;
//# sourceMappingURL=array.cjs.map
;