配列の合計を求める

以下の配列の和を求める。

array1 = [1,2,3,4,5]

slice関数 : 配列の一部をコピーして返す。

// 1番目から5個の要素をコピーして返す。
console.log(array1.slice(0, 5)) // [ 1, 2, 3, 4, 5 ] 
// 2番目以降の要素をコピーして返す。
console.log(array1.slice(1)) // [ 2, 3, 4, 5]
// 3番目以降の要素をコピーして返す。 
console.log(array1.slice(2)) // [ 3, 4, 5]
// 右から1個の要素を返す。 
console.log(array1.slice(-1)) // [ 5 ]
// 右から2個までの要素を返す。 
console.log(array1.slice(-2)) // [4, 5] 

// sliceを使用して配列の和を求める。
// 再帰でsliceを呼び出して、1番目の値を6回足していく(ただし、6回目の値は0)。
const gokei1 = (arr) => (arr.length === 0 ? 0 : arr[0] + gokei1(arr.slice(1))) 
console.log(gokei1(array1)) // 15

残余引数 (Rest Parameters)

// 残余引数だけを指定すると、残余引数に配列全体の要素がコピーされる。
const zanyo0 = ([...nokori]) => (nokori) 
console.log(zanyo0(array1)) // [ 1, 2, 3, 4, 5 ] 
// 第一引数と残余引数を指定すると、残余引数に2番目以降の配列要素がコピーされる。
const zanyo1 = ([first, ...nokori]) => (nokori) 
console.log(zanyo1(array1)) // [ 2, 3, 4, 5 ] 
// 第一引数と第二引数と残余引数を指定すると、残余引数に3番目以降の配列要素がコピーされる。
const zanyo2 = ([first, second, ...nokori]) => (nokori) 
console.log(zanyo2(array1)) // [ 3, 4, 5 ] 

// 残余引数を使用して配列の和を求める。 
// 再起に残余引数を渡して、1番目の値を6回足していく(ただし、6回目の値は0)。
const gokei2 = ([x, ...nokori]) => (x === undefined ? 0 : x + gokei2(nokori)) 
console.log(gokei2(array1)) // 15

reduce関数 : 配列から一つの値を返す。

// reduceを使用して配列の和を求める。
// 0は初期値。
const gokei3 = arr => arr.reduce((shokei, genzaichi) => shokei + genzaichi, 0)
console.log(gokei3(array1)) // 15

特に理由がなければreduce関数を使用する。

投稿日: