[英]how to convert string values to numbers in a mixed array
我有一个混合的值数组,所有字符串值。 我想获取表示数字的字符串值并将它们转换为整数。 这是我的数组:
const data = 'new york;10.99;2000';
I split it transforming it:
const transData = data.split(';');
transData = ["new york", "10.99", "2000"]
我想迭代它并为所有非数字字符串返回两个带有字符串值的干净整数。 我有点难住了。 我知道这对某些人来说很容易,但我已经尝试过 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];
您可以简单地使用||
使用.map()
以获得所需的输出。 由于NaN
是一个 falsey 值,所以它会返回正在考虑的字符串,如果它不能被Number
转换为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) 检查。
NaN === NaN
将始终返回false
。 要检查元素是否为NaN
您需要使用isNaN
函数。
const transData = ["new york", "10.99", "2000"]; for(let i = 0; i< transData.length; i++){ if(!isNaN(transData[i])){ transData[i] = +transData[i]; } } console.log(transData)
每当您需要根据以前的值为数组的每个元素获取新值时,最好使用map()
const transData = ["new york", "10.99", "2000"]; const res = transData.map(x => isNaN(x) ? x : +x); console.log(res)
使用 MAP 功能尝试类似的操作
data.split(';').map((x)=>{
x= !isNaN(x)? parseFloat(x):x;
return x;
})
是的,马希尔阿里的方法不错。 我只是修改了所有代码)
const data = 'new york;10.99;2000;0;-1;-2.45'; let transData = Array .from(data.split(';'), x => parseFloat(x)) .filter( value => !Number.isNaN(value) ); console.log(transData);
Array.from() - 从字符串数组创建一个数字数组。
Array.filter() - 从数字数组中删除 NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.