reduceの初期値
配列['apple', 'orange', 'grape']
を以下のhtmlに変換する.実行したのはGoogle Apps Script.
<ol><li>apple</li><li>orange</li><li>grape</li></ol>
結論
JavaScriptのソースは以下の通り.reduce
の第2引数(初期値)として空文字列''
を指定する必要がある.
var html='<ol>'+['apple', 'orange', 'grape'].reduce(function(acc, val){return acc+'<li>'+val+'</li>'}, '')+'</ol>';
Logger.log(html);
reduce
に渡しているコールバック関数への引数(acc,val)と返却値の遷移は以下の通り.
1回目 acc: ''
, val: 'apple'
, 返却値: '<li>apple</li>'
2回目 acc: '<li>apple</li>'
, val: 'orange'
, 返却値: '<li>apple</li><li>orange</li>'
3回目 acc: '<li>apple</li><li>orange</li>
, val: 'grape'
, 返却値: '<li>apple</li><li>orange</li><li>grape</li>'
最終結果 '<ol><li>apple</li><li>orange</li><li>grape</li></ol>'
試してみた
初期値を与えないと配列の最初の項目apple
をli
タグで囲めない.
var html='<ol>'+['apple', 'orange', 'grape'].reduce(function(acc, val){return acc+'<li>'+val+'</li>'})+'</ol>';
Logger.log(html);
1回目 acc: 'apple'
, val: 'orange'
, 返却値: 'apple<li>orange</li>'
2回目 acc: 'apple<li>orange</li>
, val: 'grape'
, 返却値: 'apple<li>orange</li><li>grape</li>'
最終結果: '<ol>apple<li>orange</li><li>grape</li></ol>'
ちなみに
数値の配列を文字列として結合する際も初期値を指定する.
Logger.log([1, 2, 3].reduce(function(acc, val){return acc+val}, ''));
// 123
初期値がないと合計値になる.
Logger.log([1, 2, 3].reduce(function(acc, val){return acc+val}));
// 6.0