如何在JavaScript中将带字符串的嵌套数组转换为数字?

时间:2017-02-25 07:18:07

标签: javascript arrays lodash

我不知道我的阵列有多深。它可能是:

let array = ["1000", "5000", "3000"];

或者:

let array = [ ["4000", "2000", "1000"], ["6000", "7000", "3000"] ];

我想将它们转换成实数。首选的处理程序是lodash。但我很欣赏每一种解决方案。

我尝试的是:

let array = array.map(Number);

但这涵盖了一维数组。

2 个答案:

答案 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));