UNPKG

@cloudcome/utils-core

Version:
130 lines (129 loc) 3.48 kB
"use strict"; 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