deno.land / x / rambda@v9.1.1 / source / swap.js

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { isArray } from './_internals/isArray.js';import { curry } from './curry.js';
function swapArrayOrString(indexA, indexB, iterable) { const actualIndexA = indexA < 0 ? iterable.length + indexA : indexA; const actualIndexB = indexB < 0 ? iterable.length + indexB : indexB; if ( actualIndexA === actualIndexB || Math.min(actualIndexA, actualIndexB) < 0 || Math.max(actualIndexA, actualIndexB) >= iterable.length ) return iterable; if (typeof iterable === 'string') { return ( iterable.slice(0, actualIndexA) + iterable[actualIndexB] + iterable.slice(actualIndexA + 1, actualIndexB) + iterable[actualIndexA] + iterable.slice(actualIndexB + 1) ); } const clone = iterable.slice(); const temp = clone[actualIndexA]; clone[actualIndexA] = clone[actualIndexB]; clone[actualIndexB] = temp; return clone;}function swapFn(indexA, indexB, iterable) { if (isArray(iterable) || typeof iterable === 'string') return swapArrayOrString(indexA, indexB, iterable);
const aVal = iterable[indexA]; const bVal = iterable[indexB]; if (aVal === undefined || bVal === undefined) return iterable; return { ...iterable, [indexA]: iterable[indexB], [indexB]: iterable[indexA], };}
export const swap = curry(swapFn);
rambda

Version Info

Tagged at
2 months ago