Swartex
@Swartex
Многорукий могоног

Как решить данную задачу?

Всем привет,
Сабж:
Напиши функцию partial(fn, a1, a2, ....), которая позволяет зафиксировать один или несколько аргументов функции.
function add(a, b) { 
  var r = 0;
  for(var i in arguments){
    r += arguments[i];
  }
	return r; 
}
function partial(arg) {
	var param = Array.prototype.slice.call(arguments, 1);
	return function(){
		return arg.apply(this, param.concat(Array.prototype.slice.call(arguments, 0)));
	}
}
var p = partial(add, 2,5);
console.log(p(1,3,1));


Собственно теперь стоит задание:

Наша функция partial позволяет фиксировать только первые аргументы. Усовершенствуй ее, чтобы зафиксировать можно было любые аргументы, пропущенные аргументы обозначаются с помощью undefined:
function test(a, b, c) { return 'a=' + a + ',b=' + b + ',c=' + c; }
var test1_3 = partialAny(test, 1, undefined, 3);
console.log(test1_3(5)); // a=1,b=5,c=3



Вот моё решение, но оно не до конца доделанное.
Не могу понять как второму undefined присвоить следующее значение из innerParams
function getValue(val) {
	return val === undefined ? 'undefined' : ' = ' + val;
};
function partialAny(/*parametrs*/) {
	var param = Array.prototype.slice.call(arguments, 1);
	return function (arg) {
		var innerParams = Array.prototype.slice.call(arguments, 0);
      for (var j=0; j< innerParams.length; j++){
		for (var i = 0; i < param.length; i++){ 
			if (param[i] === undefined) {
				param[i] = innerParams[j];
				}
        }
		}
	return param;
	}
}
var p = partialAny(getValue, 2, 5, undefined, 6, 7, undefined, 2);
console.log(p(44, 5));


Или кто может объясните мне мои ошибки, подскажите как её решить))) А то уже окончательно запутался...
  • Вопрос задан
  • 788 просмотров
Решения вопроса 1
Вам нужно хранить информацию о том, какой по счёту undefined, с которым идёт работа в конкретной итерации, чтобы знать какой индекc брать из внутренних аргументов. Тут моё решение.

Ещё у вас возникнут проблемы с повторными вызовами функции p из-за мутации массива в замыкании.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы