2017-12-30 25 views
-2

現在JavaScriptを学習中です。 そして配列内の要素を更新するためにforeachループを使用しようとしました。 しかし、問題は "console.log"の結果が常に以前と同じ配列になっていることです。 以下はそのコードです。 誰でも問題を教えてもらえますか?配列要素を更新するJS foreachループ

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
    19, 300, 3775, 299, 36, 209, 148, 169, 299, 
    6, 109, 20, 58, 139, 59, 3, 1, 139 
]; 

var addNum = function(element,index,array){ 
    if(element%3===0) 
    { 
     element += 100; 
    } 
}; 

test.forEach(addNum); 
console.log(test); 

答えて

3

JavaScriptの引数は値渡しであり、参照渡しではないからです。
element引数を変更しても何も起こりません。あなたのケースでは

、このように、mapを使用することをお勧めです:あなたは本当にforEachを使用する必要がある場合

var addNum = function(element,index,array){ 
    if(element%3===0) 
    { 
     return element + 100; 
    } 

    return element 
}; 

const result = test.map(addNum); 
console.log(result); 

- あなたはこのようにそれを行うことができます:

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
    19, 300, 3775, 299, 36, 209, 148, 169, 299, 
    6, 109, 20, 58, 139, 59, 3, 1, 139 
]; 

var addNum = function(element,index,array){ 
    if(element%3===0) 
    { 
     array[index] += 100; 
    } 
}; 

test.forEach(addNum); 
console.log(test); 

しかし、これはあります私の意見では、悪い習慣です。
forEachは、配列内の各要素を変更せずに何かを行うために設計されていますが、mapは、指定された配列の各要素に関数を実行する新しい配列を作成するように特別に設計されています。
elementはただの引数で、あなたのaddNum機能では、ここでIs there a difference between foreach and map?

+0

この正しい答えは、なぜdownvoteですか? – jmowla

+0

はい、そうです。誰かがここですべての答えをdownvotingしているようだ... –

+0

答えが一秒前に削除された昨日の回答 –

1

を説明を参照してください。これを変更すると、配列内の実際の要素ではなく、関数内の値のみが変更されます。配列を変更するには

、あなたが要素をターゲットにする必要があります。JavaScriptであなたが直接forEach()に無名関数を渡すことができることを

var test = [12, 929, 11, 3, 199, 1000, 7, 1, 24, 37, 4, 
 
    19, 300, 3775, 299, 36, 209, 148, 169, 299, 
 
    6, 109, 20, 58, 139, 59, 3, 1, 139 
 
]; 
 

 
var addNum = function(element, index, array) { 
 
    if (element % 3 === 0) { 
 
     array[index] = element + 100; 
 
    } 
 
}; 
 
test.forEach(addNum); 
 
console.log(test);

注:

test.forEach(function(element, index, array) { 
    if (element % 3 === 0) { 
     array[index] = element + 100; 
    } 
}); 
関連する問題