46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
|
import _concat from "./internal/_concat.js";
|
||
|
import _curry3 from "./internal/_curry3.js";
|
||
|
/**
|
||
|
* Applies a function to the value at the given index of an array, returning a
|
||
|
* new copy of the array with the element at the given index replaced with the
|
||
|
* result of the function application.
|
||
|
*
|
||
|
* @func
|
||
|
* @memberOf R
|
||
|
* @since v0.14.0
|
||
|
* @category List
|
||
|
* @sig Number -> (a -> a) -> [a] -> [a]
|
||
|
* @param {Number} idx The index.
|
||
|
* @param {Function} fn The function to apply.
|
||
|
* @param {Array|Arguments} list An array-like object whose value
|
||
|
* at the supplied index will be replaced.
|
||
|
* @return {Array} A copy of the supplied array-like object with
|
||
|
* the element at index `idx` replaced with the value
|
||
|
* returned by applying `fn` to the existing element.
|
||
|
* @see R.update
|
||
|
* @example
|
||
|
*
|
||
|
* R.adjust(1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'B', 'c', 'd']
|
||
|
* R.adjust(-1, R.toUpper, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c', 'D']
|
||
|
* @symb R.adjust(-1, f, [a, b]) = [a, f(b)]
|
||
|
* @symb R.adjust(0, f, [a, b]) = [f(a), b]
|
||
|
*/
|
||
|
|
||
|
var adjust =
|
||
|
/*#__PURE__*/
|
||
|
_curry3(function adjust(idx, fn, list) {
|
||
|
if (idx >= list.length || idx < -list.length) {
|
||
|
return list;
|
||
|
}
|
||
|
|
||
|
var start = idx < 0 ? list.length : 0;
|
||
|
|
||
|
var _idx = start + idx;
|
||
|
|
||
|
var _list = _concat(list);
|
||
|
|
||
|
_list[_idx] = fn(list[_idx]);
|
||
|
return _list;
|
||
|
});
|
||
|
|
||
|
export default adjust;
|