2017-01-28 10 views
-1

'arr'の値が_.map関数によって変更されていない理由を知りたいのですが。なぜ 'newarr'が機能するのですか?Underscore.js、_.map、配列内の元の値を置き換えます。

説明: console.logを使用して1から100までの数字を印刷するプログラムを作成します。 3の倍数の場合は、数字の代わりに「Fizz」を印刷します。 が5の倍数の場合は、番号の代わりに「Buzz」を印刷します。 が3と5の倍数の場合は、 "FizzBu​​zz"を印刷します。

var arr = []; 
for(i=1; i<101; i++){ 
    arr.push(i); 
} 

var newarr=[]; 
_.map(arr, function(num){ 
    if(num%5===0 && num%3===0){ 
    num='FizzBuzz'; 
    } else if(num%5===0){ 
    num='Buzz'; 
    } else if(num%3===0){num='Fizz'; 
} else {} 
    newarr.push(num); 
    return num; 
}); 

console.log(newarr); 
console.log(arr); 

答えて

2

新しい配列を返す_.map()機能。元の配列は変更されません。あなたは

arr = _.map(arr, function(num){ 
    if(num%5===0 && num%3===0){ 
    num='FizzBuzz'; 
    } else if(num%5===0){ 
    num='Buzz'; 
    } else if(num%3===0){num='Fizz'; 
} else {} 
    newarr.push(num); 
    return num; 
}); 

を書いた場合

あなたは変数arrを再割り当てしたいとnewarrは必要ないと思います。

あなたは本当に元のリストを変更したい場合は、代わりに.map().each()を使用します。

_.each(arr, function(num, i, arr){ 
    if(num%5===0 && num%3===0){ 
    num='FizzBuzz'; 
    } else if(num%5===0){ 
    num='Buzz'; 
    } else 
    if(num%3===0){num='Fizz'; 
    } else {} 
    arr[i] = num; 
}); 

バージョンは、明示的に配列を更新します。

0

map引数の配列は変更されません。代わりに結果の配列を返します。あなたが同じ配列を格納することが、結果を希望する場合は 、明示的にそれを教えてください:

arr = _.map(arr, function(num) ...

関連する問題