首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了Javascript中的实际字符串外,如何将所有字符串转换为嵌套数组中的数字?

除了Javascript中的实际字符串外,如何将所有字符串转换为嵌套数组中的数字?
EN

Stack Overflow用户
提问于 2022-09-18 11:58:34
回答 4查看 93关注 0票数 -3

我试图将2D数组中的所有值从字符串转换为数字,但实际上是字符串的值(在Javascript Excel外接程序接口中)除外。

示例:

代码语言:javascript
运行
复制
[["1000"],["3.2"],["banana"]]

代码语言:javascript
运行
复制
[[1000],[3.2],["banana]]

"1000" -> 1000
"3.2" -> 3.2
"banana" -> "banana"
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-09-18 12:30:58

此函数将帮助您解决以下问题:

代码语言:javascript
运行
复制
var values = ['1000','3.2','banana'];

function stringToNumber(arrayOfValues) {
  for (var i = 0; i < arrayOfValues.length; i++) {
    if (typeof arrayOfValues[i] != 'string' || isNaN(arrayOfValues[i])) {
      continue;
    }
    arrayOfValues[i] = +arrayOfValues[i];  // + before a string converts it to number
  }
}

更新:

在下面的注释中,您编写了从Excel接收嵌套数组,因此我为您编写了一个递归函数:

代码语言:javascript
运行
复制
var arrayOfArrays = [
  ['1000','3.2','banana'], 
  ['2','value','1820','just a word', true], 
  [20]
]; 

var values = ['1000','3.2','banana']; 

function stringToNumber(arrayOfValues) { 
  for (var i = 0; i < arrayOfValues.length; i++) { 
    if (typeof arrayOfValues[i] == 'object') {
      stringToNumber(arrayOfValues[i]); continue;
    }
    if (typeof arrayOfValues[i] != 'string' || isNaN(arrayOfValues[i])) {
      continue;
    }
    arrayOfValues[i] = +arrayOfValues[i]; // + before a string converts it to number
  }
}

试试看!

票数 0
EN

Stack Overflow用户

发布于 2022-09-18 12:18:07

在使用自己的规则确定字符串是否为数字的情况下,您可以创建一个助手函数:

代码语言:javascript
运行
复制
function asNumberIfPossible (str) {
  if (str === '') return str;
  const n = Number(str);
  return Number.isNaN(n) ? str : n;
}

const examples = [
  '1000',
  '3.2',
  'banana',
  '0',
  '',
  '1.2e5',
  '0xfff',
  '0b101',
  ' 0',
  '0 ',
  '0 1',
  '15px',
  '28.5px',
];

for (const str of examples) {
  const result = asNumberIfPossible(str);
  console.log(
    typeof result,
    JSON.stringify(str),
    '->',
    JSON.stringify(result),
  );
}

注意,使用Number()构造函数强制字符串比使用parseInt()parseFloat()更严格。例如,当使用parseFloat()时,字符串"28.5px"变成数字28.5,但是使用Number()构造函数强制字符串将导致NaN。我认为,这种严格性是可取的,因为它防止在胁迫期间失去信息:

代码语言:javascript
运行
复制
const str = '28.5px';

console.log('parseFloat:', parseFloat(str));
console.log('Number:', Number(str));

票数 0
EN

Stack Overflow用户

发布于 2022-09-18 13:27:09

用一元加运算符就行了。只要字符串是一个数字,任何字符串都可以使用它转换为一个数字。

代码语言:javascript
运行
复制
var x = +”1000”; // results in 1000
var y = +”Hi” // NaN
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73762605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档