26 lines
643 B
Markdown
26 lines
643 B
Markdown
### rearg
|
|
|
|
Creates a function that invokes the provided function with its arguments arranged according to the specified indexes.
|
|
|
|
Use `Array.reduce()` and `Array.indexOf()` to reorder arguments based on `indexes` in combination with the spread operator (`...`) to pass the transformed arguments to `fn`.
|
|
|
|
```js
|
|
const rearg = (fn, indexes) => (...args) =>
|
|
fn(
|
|
...args.reduce(
|
|
(acc, val, i) => ((acc[indexes.indexOf(i)] = val), acc),
|
|
Array.from({ length: indexes.length })
|
|
)
|
|
);
|
|
```
|
|
|
|
```js
|
|
var rearged = rearg(
|
|
function(a, b, c) {
|
|
return [a, b, c];
|
|
},
|
|
[2, 0, 1]
|
|
);
|
|
rearged('b', 'c', 'a'); // ['a', 'b', 'c']
|
|
```
|