Параметры обратного вызова метода карты массива Javascript

Javascript описывает синтаксис метода карты как:

arr.map(обратный вызов[, thisArg])

Параметры

  • callback — функция, которая создает элемент нового массива, принимая три аргумента:
  • currentValue — текущий обрабатываемый элемент массива.
  • index - Индекс текущего обрабатываемого элемента в массиве.
  • array Была вызвана карта массива.
  • thisArg — значение, используемое при выполнении обратного вызова.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

Я могу написать функцию JS, которая делает первую букву каждого слова в массиве строк заглавной, следующим образом:

capyyIt(['john', 'nelson mandela', 'james booth'])     // returns ['John', 'Nelson mandela', 'James booth']

function capyyIt(names) {
  return names.map(function capIt(curr) { return curr[0].toUpperCase() + curr.slice(1).toLowerCase(); });
}
  1. Как я могу написать capIt с 4 параметрами (даже если я не использую их все)? Я спрашиваю, потому что я пробовал это с 4 параметрами, но это не сработало.
  2. Как я могу написать capIt как не вызываемое немедленно функциональное выражение - что-то вроде:

    function capyyIt(names) {
        return names.map(capIt);
    }
    function capIt(curr,index,arr) {
        return curr[0].toUpperCase() + curr.slice(1).toLowerCase();
    }
    

person Community    schedule 13.05.2014    source источник
comment
1 почему вы хотите использовать 4 параметра, когда вам нужен только 1? 2 вы пробовали свой собственный код? что не сработало? Не тратьте время людей, если вы не дадите им вескую причину;   -  person mpm    schedule 13.05.2014
comment
@mpm - я спрашиваю, потому что пробовал с 4 параметрами, но это не сработало, хотя из документации казалось, что должно.   -  person    schedule 13.05.2014
comment
Примечание. Напоминает мой вопрос, который я задал 4 года назад: обратный вызов JS с использованием map() с функцией, имеющей один дополнительный параметр. Хотя я не из тех, кто ударил вас дупхаммером, это определенно чертовски похоже...   -  person syntaxerror    schedule 29.01.2016


Ответы (1)


Я не совсем понимаю, о чем вы спрашиваете, но давайте посмотрим, это то, что вы ищете:

function capyyIt(names) {
  names.map(function(value, index, collection){
     capIt(val);
  })
}   

function capIt(name) {
  return name.toUpperCase() + curr.slice(1).toLowerCase();
}

Функция карты принимает аргумент обратного вызова, который использует значение, индекс и коллекцию в качестве аргументов, вы не можете изменить это. Поэтому, если вы хотите что-то сделать с каждым отображаемым значением, вы должны сделать это внутри функции обратного вызова.

person JoshSGman    schedule 13.05.2014