首页 > 解决方案 > 如何将字符串值转换为混合数组中的数字

问题描述

我有一个混合的值数组,所有字符串值。我想获取表示数字的字符串值并将它们转换为整数。这是我的数组:

const data = 'new york;10.99;2000';

I split it transforming it:

const transData = data.split(';');

transData = ["new york", "10.99", "2000"]

我想对其进行迭代并返回两个干净的 int,并为所有非数字字符串返回一个字符串值。我有点难过。我知道这对某些人来说很容易,但我已经尝试过 forEach、for、map,但我仍然得到第一个数组成员的 NaN 值。即使使用“if”检查,我似乎也无法过滤或跳过它,例如:

  for(let i=0; i < transData.length; i++)
    if(transData[i] != NaN){
     transData[i] = + transData[i];
    }else{continue};

我知道这是如何工作的 transData[i] = + transData[i]; 我似乎无法用迭代/过滤器/映射/任何东西来自动化这件事。

非常感谢任何帮助。这些是用 javascript 思考大男孩/女孩的婴儿步骤。

以下是我尝试过的一些方法:

const data = 'new york;10.99;2000';
const transData = data.split(';');

// transData[1] = + transData[1];
// transData[2] = + transData[2];
console.log(transData);



const filteredTransData = transData.filter(data => data > 0);
filteredTransData.forEach((data, idx) => {
filteredTransData[idx] = + filteredTransData[idx];

标签: javascriptarrays

解决方案


您可以简单地使用||operator with.map()来获得所需的输出。由于NaN是一个虚假值,因此如果无法通过以下方式将其转换为数字,它将返回正在考虑的字符串Number

const data = 'new york;10.99;2000';

const result = data.split(";").map(s => Number(s) || s);

console.log(result);

正如@Maheer Ali 所指出的:

上述解决方案有一个局限性。它不会将字符串转换"0"为数字0,因为 0 是一个虚假值。

因此,我们可能会使用发布的其他一些解决方案,或者我们可能会在使用此修改后的数组的位置显式应用零 (0) 检查。


推荐阅读