2014-09-09 5 views
0

나는 이동 평균을 계산하는 함수를 가지고 있습니다. 배열에서 나는 현재 함수에서 함께 흐리게하는 그룹 변수 (부서)가 있습니다. 대신 그룹별로 계산을하고 싶습니다. 그것도 가능합니다 (우아하게, 추가 할 수 있습니다. 나는 초보자 용 지식으로 그것을 무력으로 만들 수 있습니다 ...)? 나중에 (부서별로) 필터링을 수행하지만 계산을 한 번 완료 한 다음 그 작업을 완료하고 싶습니다.그룹/열로 이동 평균 계산 - 자바 스크립트

누구나 우아한 해결책이 있습니까? 맵을 사용하는 것보다 더 좋은 방법이 있다면 괜찮습니다. 결국

var movingWindowAvg = function (arr, step) { // ma size = step 
    return arr.map(function (_, idx) { 
     var wnd = arr.slice(idx, idx + step); 
      var result = d3.sum(wnd.map(function(d) { return d.cases; }))/wnd.length; if (isNaN(result)) { result = _; }; 
      var nBeds= d3.sum(wnd.map(function(d) { return d.Beds; }))/wnd.length; if (isNaN(platser)) { platser = _; }; 
      var avd = wnd[0].Department; 
      if (wnd.length < step) { 
       console.log(wnd) 
      } 
      var tmpDate = wnd[wnd.length-1].datum; //Test to get the date-markers correct 
      return {Cases: result, Date: tmpDate, Beds: nBeds, Department: avd, }; 
    }); 
}; 

답변

0

나는 그룹이 작업을 수행 할 수있는 좋은 방법을 찾을 수 없습니다 내가 그것을 가능하게하려는 경우 (예를 들어, 원래 DS의 해제 편집 한 값을 가지고 도움이 될 수 있습니다 뿐만 아니라

var movingWindowAvg = function (arr, step) { // Window size = step 
    return arr.map(function (_, idx) { 
     var wnd = arr.slice(idx, idx + step); 
     counter = Object_size(wnd); 
     if (counter == step) { 
      var result = d3.sum(wnd.map(function(d) { return d.persons; }))/wnd.length; if (isNaN(result)) { result = _; }; 
      var nbeds= d3.sum(wnd.map(function(d) { return d.beds; }))/wnd.length; if (isNaN(nbeds)) { nbeds= _; }; 
      var tmpavd = wnd[0].Dep; 
      var tmpDate = wnd[step-1].datum; 
      return {Persons: result, date: tmpDate, Beds: nbeds, Department: tmpavd , }; 
     } 
    }); 

업데이트는 Object_size 기능 :

를 엄마 여부)

이 난 이후에 정의되지 않은 객체를 제거하는 슬라이스를 사용, 최종 코드를 전환합니다

Object_size = function(obj) {  
       var size = 0, key;  
       for (key in obj) {   
        if (obj.hasOwnProperty(key)) size++; 
        } return size; 
       };