mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.1 KiB
51 lines
1.1 KiB
import { INCORRECT_ITERABLE_INPUT } from './_internals/constants.js'
|
|
import { isArray } from './_internals/isArray.js'
|
|
import { keys } from './_internals/keys.js'
|
|
|
|
export function mapArray(
|
|
fn, list, isIndexed = false
|
|
){
|
|
let index = 0
|
|
const willReturn = Array(list.length)
|
|
|
|
while (index < list.length){
|
|
willReturn[ index ] = isIndexed ? fn(list[ index ], index) : fn(list[ index ])
|
|
|
|
index++
|
|
}
|
|
|
|
return willReturn
|
|
}
|
|
|
|
export function mapObject(fn, obj){
|
|
if (arguments.length === 1){
|
|
return _obj => mapObject(fn, _obj)
|
|
}
|
|
let index = 0
|
|
const objKeys = keys(obj)
|
|
const len = objKeys.length
|
|
const willReturn = {}
|
|
|
|
while (index < len){
|
|
const key = objKeys[ index ]
|
|
willReturn[ key ] = fn(
|
|
obj[ key ], key, obj
|
|
)
|
|
index++
|
|
}
|
|
|
|
return willReturn
|
|
}
|
|
|
|
export const mapObjIndexed = mapObject
|
|
|
|
export function map(fn, iterable){
|
|
if (arguments.length === 1) return _iterable => map(fn, _iterable)
|
|
if (!iterable){
|
|
throw new Error(INCORRECT_ITERABLE_INPUT)
|
|
}
|
|
|
|
if (isArray(iterable)) return mapArray(fn, iterable)
|
|
|
|
return mapObject(fn, iterable)
|
|
}
|
|
|