2015-12-01 1 views
0

второй аргумент в уменьшить обратный вызов в Javascript

var reverse = function (list) { 
 
    return list.reduce(function (reversedList, current) { 
 
    return [ current ].concat(reversedList); 
 
    }, []); 
 
}; 
 

 
console.log(reverse([1,2,3,4]));

Так что это для реверсирования массива в JavaScript, используя уменьшить. Согласно MDNs ref. Второй аргумент (здесь current) является вторым элементом после первого элемента массива, если нет initialValue. Но в этом случае ток не является вторым элементом, а последним элементом массива. Почему это так?

Вы можете запустить этот код на консоли для некоторого массива [1,2,3,4] и тока будет возвращаться 4.

+1

Ваша функция отлично работает для меня. сокращение будет обрабатывать «текущий» в том порядке, в котором их массив, согласно спецификации JS. Ток будет 4 после запуска функции, потому что это последний элемент в массиве. – hbillings

+0

Способ уменьшения работает, вы будете проходить через эту функцию обратного вызова несколько раз (4, если вы пройдете [1,2,3,4]). В первый раз первый arg будет вашим пустым массивом, а второй аргумент будет первым элементом в массиве. Во второй раз первым аргументом будет то, что обратный вызов возвращался в первый раз, а второй - вторым элементом массива. Это продолжается до конца массива. Под «текущим» понимается элемент в индексе, в котором находится цикл. – mcgraphix

+0

Вы видите что-то в своей консоли следующим образом: Array [4] Это означает, что это массив с 4 элементами в нем. – mcgraphix

ответ

0

Что ваш код делает создает новый массив с током в нем, когда вы это сделаете: [текущий] , а затем конкатенация массива «reverseedList» после него.

var reverse = function (list) { 
    return list.reduce(function (reversedList, current) { 
    //this creates a new array with just the "current" item in it 
    //and then concatenates the "reversedList" array with it. 

    console.log("concatenating ", current, "with", reversedList); 
    return [ current ].concat(reversedList); 

    }, []); 
}; 

console.log(reverse([1,2,3,4])); 

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

var reverse = function (list) { 
    return list.reduce(function (reversedList, current) { 
    reversedList.unshift(current); 
    return reversedList; 
    }, []); 
}; 

console.log(reverse([1,2,3,4])); 

Тем не менее, если вы просто пытаетесь отменить массив можно использовать метод обратного():

console.log([1,2,3,4].reverse()); 
Смежные вопросы