UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

91 lines (87 loc) 2.08 kB
/** * 原地移动数组中的元素。 * * @param arr 要处理的数组 * @param from 要移动元素的索引 * @param to 要移动到的位置索引 * @returns 返回移动后的数组 * @example * ```typescript * move([1, 2, 3], 0, 1) // => [2, 1, 3] * ``` */ export function move(arr, from, to) { var total = arr.length; if (total === 0 || from < 0 || from >= total) return arr; to = Math.min(total - 1, Math.max(0, to)); if (from === to) return arr; var item = arr.splice(from, 1)[0]; arr.splice(to, 0, item); return arr; } /** * 原地上移数组中的某个元素。 * * @param arr 要处理的数组 * @param from 要移动元素的索引 * @param step 移动步值 * @returns 返回移动后的数组 * @example * ```typescript * moveUp([1, 2, 3], 2) // => [1, 3, 2] * moveUp([1, 2, 3], 2, 2) // => [3, 1, 2] * ``` */ export function moveUp(arr, from, step) { if (step === void 0) { step = 1; } return move(arr, from, from - step); } /** * 原地下移数组中的某个元素。 * * @param arr 要处理的数组 * @param from 要移动元素的索引 * @param step 移动步值 * @returns 返回移动后的数组 * @example * ```typescript * moveDown([1, 2, 3], 0) // => [2, 1, 3] * moveDown([1, 2, 3], 0, 2) // => [2, 3, 1] * ``` */ export function moveDown(arr, from, step) { if (step === void 0) { step = 1; } return move(arr, from, from + step); } /** * 原地置顶数组中的某个元素。 * * @param arr 要处理的数组 * @param from 要移动元素的索引 * @returns 返回移动后的数组 * @example * ```typescript * moveToTop([1, 2, 3], 2) // => [3, 1, 2] * ``` */ export function moveToTop(arr, from) { return move(arr, from, 0); } /** * 原地置底数组中的某个元素。 * * @param arr 要处理的数组 * @param from 要移动元素的索引 * @returns 返回移动后的数组 * @example * ```typescript * moveToBottom([1, 2, 3], 0) // => [2, 3, 1] * ``` */ export function moveToBottom(arr, from) { return move(arr, from, arr.length - 1); }