我试图将2D数组中的所有值从字符串转换为数字,但实际上是字符串的值(在Javascript Excel外接程序接口中)除外。
示例:
[["1000"],["3.2"],["banana"]]至
[[1000],[3.2],["banana]]
"1000" -> 1000
"3.2" -> 3.2
"banana" -> "banana"发布于 2022-09-18 12:30:58
此函数将帮助您解决以下问题:
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接收嵌套数组,因此我为您编写了一个递归函数:
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
}
}试试看!
发布于 2022-09-18 12:18:07
在使用自己的规则确定字符串是否为数字的情况下,您可以创建一个助手函数:
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。我认为,这种严格性是可取的,因为它防止在胁迫期间失去信息:
const str = '28.5px';
console.log('parseFloat:', parseFloat(str));
console.log('Number:', Number(str));
发布于 2022-09-18 13:27:09
用一元加运算符就行了。只要字符串是一个数字,任何字符串都可以使用它转换为一个数字。
var x = +”1000”; // results in 1000
var y = +”Hi” // NaNhttps://stackoverflow.com/questions/73762605
复制相似问题