2017-03-28 72 views
-1

我有一些數據集:規範化數由自定義數字

const dataset = [14, 50, 202, 208, 55]; 

我必須創建一個使用dataset這樣一個新的數組:

const normalizedDataset = normalize(dataset, 5); // [15, 50, 200, 210, 55] 

曾試圖寫一些功能做它,但不幸的是我沒有大腦來解決這個問題。試過這樣的:

const normalize = (arr, n) => { 
    return arr.map(x => { 
    const y = (x % n) > n/2 ? x + (n - (x % n)) : (x % n); 
    return y ? y : x; 
    }); 
} 
normalize(dataset, 5); 

也許有人知道一些庫或做它或如何更新我自己的功能?

+0

這不是很明顯你有什麼確切地努力實現。你如何嘗試標準化數組? – user7771338

+0

你是什麼意思「我必須使用數據集創建一個新的數組」。請解釋你到底想做什麼? –

+0

@KamranEyyubov我必須做'normalize(dataset,5)'並得到'[15,50,200,210,55]' – rel1x

回答

1

您可以使用map()和其餘%運營商和基於n和仍然計算新數字。

const dataset = [14, 50, 202, 208, 55]; 
 

 
function normalize(data, n) { 
 
    return data.map(function(e) { 
 
    var m = e % n; 
 
    if (m == 0) return e; 
 
    else { 
 
     if (m > n/2) return e + (n - m) 
 
     else return e - m 
 
    } 
 
    }) 
 
} 
 

 
console.log(normalize(dataset, 5))

或較短的版本與三元運營商可以這個樣子。

const dataset = [14, 50, 202, 208, 55]; 
 

 
const normalize = (data, n) => { 
 
    return data.map(function(e) { 
 
    var m = e % n; 
 
    return (m != 0) ? (m > (n/2) ? e + (n - m) : e - m) : e 
 
    }) 
 
} 
 

 
console.log(normalize(dataset, 5))

+0

]謝謝Nenad!你幫了我很多! – rel1x

1

我想這一個是最短的解決方案。

const dataset = [14, 50, 202, 208, 55]; 
 

 
function normalize(arr, n){ 
 
\t return arr.map(function(e){ 
 
\t \t return Math.round(e/n)*n; 
 
\t }) 
 
} 
 

 
console.log(normalize(dataset, 5));

+0

非常感謝你卡姆蘭! – rel1x