9969


タイトル通りなのですが、配列のundefinedをゼロで埋めるため以下のコードを実行したのですが思い通りの動きをしてくれません。

[code]

    [0,1,2,3,,,,,,9].map(function(v){return v||0;}) // -> [0,1,2,3,,,,,,9]
    
[/code]

scores.forEach()で何回ループするか確認してみたところ、5回しかループしませんでした。  
kockoutjsのdata-bind内部に書くコードなので、できるだけ１行で済ませたいと思っています。

どうすればよいでしょうか。


CC BY-SA 3.0
2015-05-08T20:46:34.217
9966
2015-05-18T06:31:08.407
5840
question
javascript
javascriptの配列のundefinedをゼロで埋めたい


Int32Array にしてから Array に戻すとかはどうでしょうか

[code]

    Array.prototype.slice.call(new Int32Array([0,1,2,3,,,,,,9]))
    // [0, 1, 2, 3, 0, 0, 0, 0, 0, 9]
    
[/code]


CC BY-SA 3.0
2015-05-08T22:51:16.060
9969
2015-05-08T23:27:46.683
2015-05-08T23:27:46.683
2494
2494
9966
answer

[code]

    Array.apply(null, sparseArray)
    
[/code]

とすれば、[[HasProperty]]=falseによるundefined -> undefinedという値 の変換ができます  
ですが、読みにくい・理解されにくいので

[code]

    function makeArray(n) {
        var array = [];
        for (var i = 0; i < n; ++i) {
            array[i] = undefined;
        }
        return array;
    }
    
[/code]

といった関数を作るか、_.rangeを利用するのがよいと思います

下のブログにも書いてありますが、地道にfor文を記述したほうが速いようです  
要素数が大きい配列を作成する、何度も配列を作成する場合は気をつけたほうがよさそうです  
<http://blog.scheakur.com/post/96000209437/javascript-0-n-1-array>


CC BY-SA 3.0
2015-05-18T06:31:08.407
10306
2015-05-18T06:31:08.407
9780
9966
answer