0

これは、オブジェクトを配列の項目で埋めることに関する学習問題に対する私の最初の解決策です...しかし、もっと良い解決策があるはずです。「for... in」が適切な方法ではない場所を読みましたが、忘れているより良い方法はありませんか?

var doubler = function(arr) // fills object with numbers and their doubled value
{
    var my_obj = {};
    for(var i=0; i<arr.length; i++)
    {
        my_obj[arr[i]] = arr[i]*2;     
    }
console.log(my_obj);
}

doubler([5,7,2,3,4,7])
4

3 に答える 3

2

楽しみのために、次を使用しArray.prototype.reduceます。

function doubler(a) {
    return a.reduce(function(o, n) {
        o[n] = n * 2;  // adds required key and value to object
        return o;      // returns filled object
    }, {} );           // start with an empty object
}

reduceは配列と初期値 ( {}) を取り、配列の各値と前の反復の結果に対して何らかの操作を順番に実行します (ここで、a[0] と{}は最初の反復に使用されます)。

ここでは、副作用 (オブジェクトへの割り当て) を引き起こし、最初のオブジェクト ( o == {}) を取得し、各反復で同じ (変更された) オブジェクトを返すことで、少し悪用しています。

のより慣用的な使用法は次のreduceようになります。

function addUp(a) {
    return a.reduce(function(running_total, n) {
        return running_total + n;
    }, 0);  // 0 is actually the default value
}
于 2013-09-11T16:27:44.290 に答える