Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Swartex
6 / 6 / 0
Регистрация: 06.03.2014
Сообщений: 108
1

Не могу понять как переделать функцию

12.12.2016, 23:45. Просмотров 785. Ответов 4
Метки нет (Все метки)

Всем привет
Есть задание:
Наша функция partial позволяет фиксировать только первые аргументы. Усовершенствуй ее, чтобы зафиксировать можно было любые аргументы, пропущенные аргументы обозначаются с помощью undefined. Обрати внимание, что теперь мы переименовали ее в partialAny, чтобы не путать с предыдущей:
Javascript
1
2
3
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
Выкладываю предыдущее задание :
Звучит так:
Напиши функцию
Javascript
1
partial(fn, a1, a2, ....),
которая позволяет зафиксировать один или несколько аргументов функции.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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));
а вот как переделать её что бы можно было, зафиксировать любые аргументы - ума не приложу. Знаю, задание кажется очень простое, но всё же... я как то запутался.

Вот то до чего смог додуматься я:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function test(a, b, c) {
    return 'a=' + a + ', b=' + b + ', c=' + c;
}
function partialAny(arg) {
    var param = Array.prototype.slice.call(arguments, 1);
    for (var i = 0; i < param.length; i++) {
        if (param[i] === 'undefined'){
            // что то сделать!
        }
    }
    return function(){
       return arg.apply(this, param.concat(Array.prototype.slice.call(arguments, 0)));
    }
}
var p = partialAny(test, 2, 5, undefined);
console.log(p(1));
Если кому то не сложно, подкиньте идею как это сделать(готовое решение не кидайте интересно ведь самому в итоге написать )
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2016, 23:45
Ответы с готовыми решениями:

Не могу понять как мне найти функцию внедряющую в тег определенный стиль
Уважаемые JS программисты, Я в JS профан. Задача воткнуть на сайта слайдер фотогалереи. Заметил что...

Не могу понять как делать функцию
Дано действительное число A. Для функций, графики которых представлены на рисунке вычислить...

Не могу понять, как разработать функцию convert_n_to_m(x, n, m)
Разработать функцию convert_n_to_m(x, n, m), которая принимает 3 аргумента -- целое число (в...

Не могу понять как я должен передовать значение в функцию
Ошибка происходит во время вызова функции из основного блока программы. Почему?? struct tex {...

Как понять поставленную задачу. Не могу понять этот полиморфизм
A software academy teaches two types of courses: local courses that are held in some of the...

4
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16767 / 6654 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
13.12.2016, 00:10 2
а почему не описать "в лоб", в духе 'a1 = ..., a2 = ..., a3 is undefined, a4 = ..., ...' (или пропускать "undefined" переменные, но счетчик переменной инкрементировать)?
Или я неверно понял ваш вопрос?
0
Swartex
6 / 6 / 0
Регистрация: 06.03.2014
Сообщений: 108
13.12.2016, 10:41  [ТС] 3
Не совсем вас понял...
пример можно такого цикла?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16767 / 6654 / 869
Регистрация: 12.06.2012
Сообщений: 19,902
Завершенные тесты: 1
13.12.2016, 11:02 4
Лучший ответ Сообщение было отмечено Swartex как решение

Решение

https://jsfiddle.net/KOPOJI/gud928hp/
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getValue(val)
{
    return val == undefined ? ' is undefined' : ' = ' + val;
}
function partial(fn, a1, a2)
{
    var ret = 'fn' + getValue(fn) + ', a1' + getValue(a1) + ', a2' + getValue(a2);
    if(arguments.length < 3)
        return ret;
    for(var i = 2; i < arguments.length; ++i)
        ret += ', a' + (i + 1) + getValue(arguments[i]);
    return ret;
}
alert(partial('foo', 'bar', 'lol', 'lorem', undefined, 'ipsum', 'dolor'))

либо, как вариант нечто такое https://jsfiddle.net/KOPOJI/gud928hp/1/
Кликните здесь для просмотра всего текста
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
function getValue(val, i)
{
    return val == undefined ? '' : (i === 1 ? 'fn' : ', a' + i) + ' = ' + val;
}
function partial(fn, a1, a2)
{
    var ret = '';
    for(var i = 0; i < arguments.length; ++i)
        ret += getValue(arguments[i], i + 1);
    return ret;
}
alert(partial('foo', 'bar', 'lol', 'lorem', undefined, 'ipsum', 'dolor'))
1
Swartex
6 / 6 / 0
Регистрация: 06.03.2014
Сообщений: 108
13.12.2016, 11:26  [ТС] 5
Спасибо!
0
13.12.2016, 11:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 11:26

Не могу понять функцию fwrite()
Приветствую всех! Прошу объяснить почему при записи на файл структуру выходит только надпись Hello...

Стек на основе массива структур - эт как понять читаю литературу и не могу понять!
Стек статически (на основе массива структур). Пример структура &quot;Товар&quot; которая включает в себя: №...

Написать функцию не могу понять этот язык!
Задание такое : ФАМИЛИЯ ИМЯ ОТЧЕСТВО написано в верхнем регистре. Написать функцию, которая будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru