我不知道我的阵列有多深。它可能是:
let array = ["1000", "5000", "3000"];
或者:
let array = [ ["4000", "2000", "1000"], ["6000", "7000", "3000"] ];
我想将它们转换成实数。首选的处理程序是lodash。但我很欣赏每一种解决方案。
我尝试的是:
let array = array.map(Number);
但这涵盖了一维数组。
答案 0 :(得分:1)
对嵌套数组使用Array#map
方法和递归方法。
function conv(arr) {
// iterate over the array
return arr.map(function(v) {
// if the element is an array call the function recursively
// or parse the number and treat NaN as 0
return Array.isArray(v) ? conv(v) : Number(v) || 0;
})
}
const array = [
["4000", "2000", "1000", ""],
["6000", "7000", "3000"]
];
const array1 = ["1000", "5000", "3000"];
function conv(arr) {
return arr.map(function(v) {
return Array.isArray(v) ? conv(v) : Number(v) || 0;
})
}
console.log(conv(array));
console.log(conv(array1));
使用ES6 arrow syntax:
let conv = arr => arr.map(v => Array.isArray(v) ? conv(v) : Number(v) || 0)
const array = [
["4000", "2000", "1000", ""],
["6000", "7000", "3000"]
];
const array1 = ["1000", "5000", "3000"];
let conv = arr => arr.map(v => Array.isArray(v) ? conv(v) : Number(v) || 0)
console.log(conv(array));
console.log(conv(array1));
答案 1 :(得分:1)
更通用的解决方案是map
的版本,它可以使用任何函数并在数组或标量上工作:
const maybeMap = fn => x => Array.isArray(x) ? x.map(maybeMap(fn)) : fn(x);
const numberify = maybeMap(Number);
const array = ["1000", ["2000", "3000"], "4000"];
console.log(numberify(array));