我需要以給定的精度舍入數組中的值。數組可以包含任何數據類型,因此非數值應該按原樣存在。的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]
我tryied如果ELEM是數組,這樣圓形的遞歸調用來解決這個()函數:
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]
768,16是這樣
[5.48, 4.87, [5.48, 9.49, 'fff'], 5.48, true]