2013-08-14 3 views
0

올바르게 작동하는 다음 코드를 작성했습니다. 숫자에서 각 멤버 두 개를 취하여 나누는 새 배열을 만듭니다. 샘플 :Javascript/jQuery 업데이트 날짜

var numbers = [{ "name": "testvalue", "data": [10] }, 
       { "name": "testtotal", "data": [2] }, 
       { "name": "prodvalue", "data": [10] }, 
       { "name": "prodtotal", "data": [2] }]; 

var mydata = $.grep(numbers, function(e) { 
    return new RegExp('^test*').test(e.name) 
}); 

console.log(mydata) // prints [{"name": "testvalue", "data": [10]}, {"name": "testtotal", "data": [2]}] 

result = [{ 
    "name": "testresult", 
    "data": [mydata[0]["data"]/mydata[1]["data"]] 
}]; 

console.log(result) // [{"name": "testresult", "data": [5]}] 

내 질문은, 효율성에 관한 것입니다 내가 효율적인 뭘하는지 또는 일을 할 수있는 더 좋은 방법은 무엇입니까? (나는 JS/jQuery에 익숙하지 않아서 내가 묻고있다.)

나는 숫자의 내용에 대한 상관 없어, 내가 원하는 모든 요청에 ​​따라 모든 요소 이름은

샘플 실제 데이터 총이나 값으로 끝나는 모든 두 요소를 나눌 수 있습니다. 특히 데이터가 흑연/d3에서 온다 .json

var data = 
[ {"target": "xs12t11.Busy", "datapoints": [34,54,65,76,87] }, 
    {"target": "xs12t11.Total", "datapoints": [34,54,2,12,33]} ]; 
+0

'numbers '를 제어 할 수 있습니까? 그렇다면 그 구조를 표현하는 더 좋은 방법이 있습니다. 배열 인덱스가 모두 유익하지는 않기 때문에 여기에서 무엇을하고 있는지 분명하지 않습니다. – dc5

+0

예, 문제는이 데이터가 d3.json에서 왔고 불행히도 제어 할 수 없지만 기본적으로 각 요소에는 "total"및 "value"라는 이름의 두 해시가 있습니다. – nevermind

+0

더하기 두 번이 요청을 수행 할 수 없습니다. 그래, 내가 붙어있어. 내 방식대로 작동하지만 방금 전문가들의 견해를 생각했습니다. – nevermind

답변

0

나는 당신의 요구 사항을 아직도 잘 모른다. data을 반복하고 결과로 변환하는 두 가지 예제를 제공했습니다.

행 홀수의 가능성과 같은 입력이 주어 :

var data = 
[ {"target": "xs12t11.Busy", "datapoints": [34,54,65,76,87] }, 
    {"target": "xs12t11.Total", "datapoints": [34,54,2,12,33] }, 
    {"target": "xs12t12.Busy", "datapoints": [34,54,2,12,33]} ]; 

예 각 행 시리즈까지 1 덧셈 및 행 쌍당 한 평균 결과를 제공한다 :

function sum(inArr) { 
    var retVal = 0; 

    for(var i = 0; i < inArr.length; ++i) retVal += inArr[i]; 
    return retVal; 
} 


var result = []; 

// Increment by 2 to grab records in pairs 
for(var i = 0; i < data.length; i += 2) { 
    var series1 = data[i]; 
    var series2 = data[i+1]; 

    // Series1 always exists, but series2 may not 
    if(!series2) break; 

    result.push({ 
     name: series1.target.split('.')[0], 
     data: sum(series1.datapoints)/sum(series2.datapoints) 
    }); 
} 

console.log(JSON.stringify(result)); 

출력

[{"name":"xs12t11","data":2.3407407407407406}] 
이 중 어느 것도 인라인 당신이 찾고있는 것과 경우

function avgSeries(series1, series2) { 
    var retVal = []; 
    var len = Math.min(series1.length, series2.length); 

    for(var i = 0; i < len; i++) retVal.push(series1[i]/series2[i]); 
    return retVal; 
} 

var result = []; 

// Increment by 2 to grab records in pairs 
for(var i = 0; i < data.length; i += 2) { 
    var series1 = data[i]; 
    var series2 = data[i+1]; 

    // Series1 always exists, but series2 may not 
    if(!series2) break; 

    result.push({ 
     name: series1.target.split('.')[0], 
     data: avgSeries(series1.datapoints, series2.datapoints) 
    }); 
} 

console.log(JSON.stringify(result)); 

출력

[{"name":"xs12t11","data":[1,1,32.5,6.333333333333333,2.6363636363636362]}] 

: 평균의 일련의 행의 각 쌍에 대한개

예 2 개 결과를 반환 나에게 알려줘.

+0

고마워요! 그게 내가 기대했던 것 이상이야 :) – nevermind