2017-11-28 1 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