使用javascript规范化数字

使用javascript规范化数字,javascript,Javascript,我想将数字标准化为0到10的范围。。用异常值排除法 例如: var arr = [100,200,19,0,200,12,20000] normalise(arr,200); // should be 10 normalise(arr,12); // should be 0.6 // My expected output for above array: [5, 10, 0.95, 0, 10, 0.6, 10] 下面是使用python的示例代码,这正是我想要的 arr = np.arr

我想将数字标准化为0到10的范围。。用异常值排除法

例如:

var arr = [100,200,19,0,200,12,20000]

normalise(arr,200); // should be 10
normalise(arr,12); // should be 0.6

// My expected output for above array:
[5, 10, 0.95, 0, 10, 0.6, 10]
下面是使用python的示例代码,这正是我想要的

 arr = np.array([100,200,19,0,200,12,20000])
 upper_lim = np.median(arr) * 2
 arr_adj = np.where(arr>upper_lim, upper_lim, arr) / upper_lim
 arr_adj *= 10
我尝试将其转换为javascript,如下所示,我对javascript是新手

函数normalisearr,值{ var arr=[100200,19,02000,12000] var上限=中间值*2; //我在这里被打动了 恢复正常*10; } 函数中间数{ var中值=0, 计数=数字。长度; 数字。排序; 如果计数%2==0{//为偶数 中位数=数字[计数/2-1]+数字[计数/2]/2; }否则{//是奇怪的 中位数=数字[计数-1/2]; } 返回中值; } normalisearr,200;//应该是10岁 请帮我把它转换成javascript,谢谢

np.where(arr>upper_lim, upper_lim, arr) / upper_lim;

默认情况下,排序方法按字母顺序对元素进行排序

function normalise(arr,value)
{
    var count = arr.length;
    arr.sort((a, b) => a - b);
    if (count % 2 === 0) {  // is even
    median = (arr[count / 2 - 1] + arr[count / 2]) / 2;
      } else { // is odd
    median = arr[(count - 1) / 2];
   }
    var upper_lim = median*2;
    //console.log(upper_lim);
    /*for ( i = 0; i < count; i++ ) {
        arr[i] = 10*Math.min(arr[i], upper_lim )/upper_lim;
    }
    console.log(arr);
    */

    return  10*Math.min(value, upper_lim )/upper_lim;
}
var arr = [100,200,19,0,200,12,20000]
console.log(normalise(arr,200)); // should be 10
为什么有两个normalize调用,而数组只有一个结果?2万人怎么办?