2016-05-04 23 views
-2

假設我有數據陣列如下:計算與平均值的最大距離爲數據點的數組,並返回相關的數據點

var data = [{name: "craig", value: 10}, {name: "oliver", value: 15}] 

我想使用的功能,其允許參數,如:

function separateTheWheatFromTheChaff(windowSize, pointsTaken, data, valueAccessor) {} 

其中,windowSize是要評估的數組位置的數量,pointsTaken是要返回的數據點的數量。

所以我知道我需要從中獲得平均值的總和。我將需要計算每個數組位置的math.abs與平均值的關係,並比較每個結果以找到離平均值最遠的數據點陣列位置,然後將該原始數據點值返回給新數組。

到目前爲止,我有:

var data = [{name: "craig", value: 10}, {name: "oliver", value: -10}] 

function separateTheWheatFromTheChaff(windowSize, pointsTaken, data, valueAccessor) {  
    var i; 
    sum = 0; 
    for(i = 0; i < windowSize; i++) { 
     sum += valueAccessor(data[i]); 
    } 
    mean = sum/windowSize 
    for (i = 0; i < windowSize; i++) { 
     Math.abs(valueAccessor(data[i]) - mean) 
    } 
} 

separateTheWheatFromTheChaff(5, 1, data, function(item) { return item.value }); 

所以我的問題是,如何將我需要修改 separateTheWheatFromTheChaff函數來計算從平均數據點最遠的陣列位置 和回報所述數據點 爲新陣列。

在此先感謝,我希望這是有道理的。

+2

究竟是什麼問題?你沒有真的問過一個問題。 – digglemister

+0

我已經添加了一個塊引用來清除問題。 – Hicki

回答

0

這裏有一種方法:

EDITED解答:

//create an array to store all distances 
var distances = []; 
for (i = 0; i < windowSize; i++) { 
    //calculate distance from mean 
    var distance = Math.abs(valueAccessor(data[i]) - mean); 
    //store initial datapoint with its distance from mean in array 
    var datapoint_w_distance = {datapoint: data[i], 
           dist: distance} 
    distances.push(datapoint_w_distance) 
} 
//sort array so datapoint with largest distance from mean is first 
distances.sort(function(a,b) {return b.dist-a.dist}); 
//use the pointsTaken parameter to get the correct number of original datapoints back 
var wheat = []; 
for (var j=0; j < pointsTaken; j++) { 
    wheat.push(distances[j].datapoint) 
} 
return wheat; 

例如,如果

var data = [{name: "a", value: 20}, 
      {name: "b", value: 10}, 
      {name: "c", value: 90}, 
      {name: "d", value: 100}, 
      {name: "e", value: 0}] 

然後separateTheWheatFromTheChaff(5, 2, data, function(item) { return item.value })返回陣列[{name: "d", value: 100}, {name: "c", value: 90}]

工作小提琴:https://jsfiddle.net/ubbrx3u3/5/

+0

@Hicki我已經編輯了我的答案,以適合我相信你在尋找的內容,以便您可以獲取多個數據點。 – digglemister