deno.land / x / rambda@v9.1.1 / source / assocPath.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
44
45
46
47
import { cloneList } from './_internals/cloneList.js'import { createPath } from './_internals/createPath.js'import { isArray } from './_internals/isArray.js'import { isIndexInteger } from './_internals/isInteger.js'import { assocFn } from './assoc.js'import { curry } from './curry.js'
export function assocPathFn( path, newValue, input){ const pathArrValue = createPath(path) if (pathArrValue.length === 0) return newValue
const index = pathArrValue[ 0 ] if (pathArrValue.length > 1){ const condition = typeof input !== 'object' || input === null || !input.hasOwnProperty(index)
const nextInput = condition ? isIndexInteger(pathArrValue[ 1 ]) ? [] : {} : input[ index ]
newValue = assocPathFn( Array.prototype.slice.call(pathArrValue, 1), newValue, nextInput ) }
if (isIndexInteger(index) && isArray(input)){ const arr = cloneList(input) arr[ index ] = newValue
return arr }
return assocFn( index, newValue, input )}
export const assocPath = curry(assocPathFn)
rambda

Version Info

Tagged at
2 months ago