2017-01-18 4 views
2

を減らす使用するにはJavascriptをリファクタリングマップの例:私は減らす使用するマップの一例を変換しようとしている練習として

const numbers = [1, 2, 3, 4]; 

numbers.map(function(a,b) { 
    return a+b; 
}); 
// [1, 3, 5, 7] 

と同じ例えば私の試みは、減らす:

numbers.reduce(
    (sum, elem) => { 
    sum.push(elem + elem); // how can one add the index of array to the number instead of doubling it? 
    return sum; 
    }, []); 
// [2, 4, 6, 8], instead I want: [1, 3, 5, 7] 

答えて

5

あなた結果はとなります。あなただけ誤っ:)で好きなあなたmap機能が働き、インデックス

const numbers = [1, 2, 3, 4]; 
 

 

 
var arr = numbers.reduce(
 
    (sum, elem, index) => { 
 
    sum.push(elem + index); 
 
    return sum; 
 
    }, []); 
 

 
console.log(arr);

しかし

で三番目のパラメータを渡します。

map関数は、2つの兄弟項目ではなく項目とそのインデックスをパラメータとして受け取ります。

ここを参照してください。最後から最後の項目を変更すると、別の動作が発生します。あなたのロジックでは、最後のアイテムは11でなければなりません.2つの兄弟アイテムを受け入れる場合は、まだ7ではありません。アイテムとそのインデックスを受け入れるためです。

データが変更された例。

1 -> 1 + 0 (index) = 1 
2 -> 2 + 1 (index) = 3 
3 -> 3 + 2 (index) = 5 
4 -> 4 + 3 (index) = 7 

const numbers = [1, 2, 7, 4]; 
 

 
var arr = numbers.map(function(a,b) { 
 
    return a+b; 
 
}); 
 

 
console.log(arr);

出力

1 -> 1 + 0 (index) = 1 
2 -> 2 + 1 (index) = 3 
7 -> 7 + 2 (index) = 9 
4 -> 4 + 3 (index) = 7 

reduce機能は、基本的なフォームの二つのパラメータ、アレイの項目と以前の反復からの戻り値で受け付け。

私はあなたがこれらの機能をよく理解していないと思います。

あなたがtruthynessと実際の項目のチェックと前の項目を追加することができArray#map()Array#reduce()

+0

うーん、私はちょうど減らすとマップの例と同じ結果を望んでいました。あなたの答えでは、あなたはマップの例を詳しく説明しますが、私の質問には答えませんでした。 – StandardNerd

+0

@StandardNerdが更新されました –

+0

ありがとうございます、あなたのソリューションはニーナより読みやすいです! – StandardNerd

1

で詳細を読むことができます。 concatinated値を持つ配列を返します。

var numbers = [1, 2, 3, 4], 
 
    result = numbers.reduce((r, a, i, aa) => r.concat((aa[i - 1] || 0) + a), []); 
 

 
console.log(result);

+0

うわー、ありがとう、ニーナ! – StandardNerd

関連する問題