2017-11-28 32 views
1

データセット内のフィーチャ(0と1の間)を正規化する関数を記述しようとしています。私はすべての機能を反復したいと私はそれらを正規化するとの値を置き換えます。正規化は正常に機能しますが、以前の値を上書きすることはできません。私はそれがすべてを上書きした後(値)にconsole.log場合JavaScript内 - オブジェクト内の配列値を置換する

Data.prototype.normalize = function(dataset) { 

    // Get the extent for each feature 
    for (var feature = 0; feature < this.featureCount; feature++) { 
     var extent = this.getExtent(feature, dataset), 
      min = extent[0], 
      max = extent[1]; 

     // uses extent to normalize feature for all companies 
     for (var company = 0; company < this.companies.length; company++) { 
      var value  = this.companies[company][dataset][feature], 
       normalized = this.normalizeValue(value, min, max); 

      value = normalized; 
     } 
    } 

} 

は、それはすべてが動作しているようですが、唯一の機能の範囲内で

value = normalized; 

で失敗します。この範囲外では、元の値が残っています。

data.companies[n] = { features : [1, 2, 3, 4, 5], other properties... } 

次に、私のメインオブジェクト内のフィーチャ配列の例を示します。

これを修正する方法についてのご意見はありますか?

ありがとうございました!

+0

[プリミティブ型](https://developer.mozilla.org/en-US/docs/Glossary/Primitive)されることはありませんJavascriptで参照渡し。 – Tomalak

答えて

5

変更が関数ではなくオブジェクトに反映されるようにするには、オブジェクトのプロパティを明示的に設定する必要があります。

明示的にそうように正規化した値を設定するために、あなたのforループを変更します。

for (var company = 0; company < this.companies.length; company++) { 
    var value  = this.companies[company][dataset][feature], 
     normalized = this.normalizeValue(value, min, max); 

    this.companies[company][dataset][feature] = normalized; // explicitly set value 
} 
+1

素晴らしい精神的なデバッグ。 – Tomalak

+0

それはトリックでした。ありがとうございました! – Knut