JSFiddle - React, Tailwind, and code Playground
JavaScript
"use strict"
function mult() {
var result = arguments[0];
for(var i = 1; i < arguments.length; i++){
result *= arguments[i];
}
return result
}
function partialAny() {
var arrArg = [].slice.call(arguments); //копирую аргументы partialAny
return function(){
var result = arrArg.slice(1); //снова копирую эти же аргументы, чтобы вызывать функцию несколько раз
var arr = [].slice.call(arguments).reverse(); //копирую аргументы передаваемые в mult1
for(var i = 0; i < result.length && arr.length !== 0; i++){ //проверяю наличие аргуметов у mult1
if(result[i] === undefined) result[i] = arr.pop(); //ищу undefined и заменяю его на соотвествущий арг.
}
if(arr.length !== 0) result = result.concat(arr);//присоединяю остатки массива
return arrArg[0].apply(this, result);//передаю функции (из аргумента partialAny) конечный массив
}
}
var mult1 = partialAny(mult, 1, undefined, 3, undefined);
alert(partialAny(mult, 1)(10, 60));
alert(mult1(10, 2));
alert(mult1(2, 2, 2, 2));
alert(mult1(5));
/*function partialAny() {
var arrArg = [].slice.call(arguments);
return function(){
var arrArg1 = arrArg.slice();
var func = arrArg1.shift(); А так я сделал первый раз, как уебан, но за
var arr = [].slice.call(arguments); все тесты прошло.
for(var i = 0; i < arrArg1.length; i++){
if(arrArg1[i] === undefined) arrArg1[i] = arr.shift();
if(arr.length === 0) break;
}
if(arr.length !== 0) arrArg1 = arrArg1.concat(arr);
return func.apply(this, arrArg1);
}
}*/