配列の値を指定した精度で丸める必要があります。配列には任意のデータ型を含めることができるので、非数値の値はそのままの値にする必要があります。 2つの小数が必要なアレイのExaple:javascript:N次元配列の数値の丸め
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function roundNumericValuesInArray(array, precision){
var roundedArray = [];
array.forEach(function round(elem){
if(isNumber(elem)) {
roundedArray.push(elem.toFixed(precision));
} else{
roundedArray.push(elem);
}
})
return roundedArray;
}
var simpleArray = [5.454545, 8.456545646, true, 'fff'];
console.log(roundNumericValuesInArray(simpleArray, 2));
//["5.45", "8.46", true, "fff"]
は、1次元配列のために良い作品が、配列が別の配列が含まれている場合、それは要素だとして、このコードは正しく動作しません、内側の配列の値はしません丸められ:
var twoDimensionalArray = [5.48878533, 4.8798765, [5.4843, 9.498787878, 'fff'], 5.4852, true];
console.log(roundNumericValuesInArray(twoDimensionalArray, 2));
// ["5.49", "4.88", [5.4843, 9.498787878, 'fff'], "5.49", true]
私はelemは、このような配列である場合、ラウンドの再帰呼び出し()関数でこの問題を解決するためにtryiedました:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
function roundNumericValuesInArray(array, precision){
var roundedArray = [];
array.forEach(function round(elem){
if(isNumber(elem)) {
roundedArray.push(elem.toFixed(precision));
} else if(elem.constructor === Array){
round(elem);
} else {
roundedArray.push(elem);
}
})
return roundedArray;
}
しかし、インタプリタは「例外RangeErrorがスローされます。最大コールスタックサイズ」を超え、それは無限ループか何かに変わる:
var twoDimensionalArray = [5.48878533, 4.8798765, [5.4843, 9.498787878, 'fff'], 5.4852, true];
console.log(roundNumericValuesInArray(twoDimensionalArray, 2));
//Maximum call stack size exceeded
だからそれが問題だ:多次元配列の数値要素のラウンド値、どんなに深い彼らはありません。
[5.48878533, 4.8798765, [5.4843, 9.498787878, 'fff'], 5.4852, true]
ため
出力は、与えられた配列で反復して再帰的なアプローチを使用することができます
[5.48, 4.87, [5.48, 9.49, 'fff'], 5.48, true]