書き方:配列名.reduce(コールバック関数, 初期値); ※初期値はあってもなくてもいい。

コールバック関数はアロー関数などで直接処理を記述してもOK

▼コールバック関数内の引数

第一引数:accu ※accumulateの略。積み重ねるという意味

第二引数:curr ※currentの略。カレント。ITでは「現在選択されている」「操作や処理の対象となっている」という意味で用いられることが多い。

▼改めての書き方

// 初期値なしの場合
配列名.reduce((accu, curr) => {

		//処理

});

// 初期値ありの場合
//reduceメソッドの第二引数(初期値)を指定してあげると、それが最初のaccuとして渡される
配列名.reduce((accu, curr) => {

		//処理

}, 第二引数);

例1)初期値なしの場合

const arry = [1,2,3,4,5];

arry.reduce((accu, curr) => {
    console.log(accu, curr);
    return accu + curr;
 });
→ 1 2
	3 3
	6 4
	10 5
//前のループの戻り値がaccuに入る。積み重ねるだから。

//以下だと戻り値がないために、途中からaccuの値がundefindになる。
arry.reduce((accu, curr) => {
    console.log(accu, curr);
});
→ 1 2
	undefind 3
	undefind 4
	undefind 5

例2-a)初期値ありの場合 その1.

const arry = [1,2,3,4,5];

arry.reduce((accu, curr) => {
    console.log(accu, curr);
    return accu + curr;
 }**, 10**);
→ 10 1
	11 2
	13 3
	16 4
	20 5
//前のループの戻り値がaccuに入る。積み重ねるだから。

//以下だと戻り値がないために、途中からaccuの値がundefindになる。
arry.reduce((accu, curr) => {
    console.log(accu, curr);
}**, 10**);
→ 10 1
	undefind 2
	undefind 3
	undefind 4
	undefind 5

例2-b)初期値ありの場合 その2.

/**
* "animation"の各文字に <> をつけて<a><n><i><m><a><t><i><o><n>にする
*/

const str = 'animation';
const strArry = str.split(""); //animationを一文字ずつ区切って配列に格納

const result = strArry.reduce((accu, curr) => {
    return `${accu}<${curr}>`;
 }**, ""**); //初期値に空文字を入れることで、aも<>で囲われるようにする。

console.log(result);
→ <a><n><i><m><a><t><i><o><n>

▼reduceメソッドの仕組み(中身を自身で再現したよ)