【问题标题】:How to convert nested arrays with strings to numbers in JavaScript?如何在 JavaScript 中将带有字符串的嵌套数组转换为数字?
【发布时间】:2023-03-08 00:10:01
【问题描述】:

我不知道我的数组有多深。可能是:

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

或者:

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

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

我尝试的是:

let array = array.map(Number);

但这涵盖了一维数组。

【问题讨论】:

  • 请提供更多信息以支持您的投票,谢谢!
  • 请访问help center 了解如何提问,您会发现我们需要 EFFORT 和 CODE 来帮助您:寻求调试帮助的问题(“为什么这段代码不起作用?” ) 必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。见:minimal reproducible example
  • 我添加了我的方法。
  • 这是我使用 lodash 作为答案找到的完全相同的副本。你也可以发现 :) stackoverflow.com/questions/25333918/js-deep-map-function
  • @mplungian 他不是在寻求调试帮助,因此您引用的部分不适用。问题陈述也非常清楚。

标签: javascript arrays lodash


【解决方案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));

【讨论】:

  • 使用“const”键而不是任何其他键的任何特殊原因?
  • @BekimBacaj,数组不会改变。
  • @PranavCBalan 我们知道 const 声明是什么,我们只是认为这是一种误用——没有人会改变你的数组。 :)
【解决方案2】:

更通用的解决方案是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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多