Javascript中的自定义myParseInt()函数

Javascript中的自定义myParseInt()函数,javascript,arrays,numbers,Javascript,Arrays,Numbers,我必须在JavaScript中开发自定义myParseInt函数,该函数将字符串作为参数,然后返回所提供参数中数据类型为number的所有整数。 这是我的密码 'use strict'; function myParseInt (value) { let items = value.split('').map(Number); let myNumbers = []; items.forEach(function(item){ if(typeof item

我必须在JavaScript中开发自定义myParseInt函数,该函数将字符串作为参数,然后返回所提供参数中数据类型为number的所有整数。 这是我的密码

'use strict';

function myParseInt (value) {
    let items = value.split('').map(Number);
    let myNumbers = [];
    items.forEach(function(item){
        if(typeof item === 'number' && !isNaN(item)) {
            myNumbers.push(item);
        }
    });
    return myNumbers.join('');
}
var result = myParseInt('sq12q12');
console.log(result, typeof result );
实际产出

1212 string
1212 number
所需输出

1212 string
1212 number
我得到了期望的值,但问题在于数据类型。我如何在不使用parseInt的情况下执行此操作


以下是代码测试的Repl会话

您可以在返回之前转换:

 var n = Number(myNumbers.join(''));
 return n;
编辑 你可以在这里看到:

您可以在返回之前转换:

 var n = Number(myNumbers.join(''));
 return n;
编辑 你可以在这里看到: 应该返回一个字符串。您需要将该字符串转换为一个数字

话虽如此,您可以像这样重写您的函数:

function myParseInt(value) {
    // strip all non-digit characters from string
    // cast the resulting string to a number
    return Number(value.replace(/\D/g, ""));
}
var result = myParseInt("sq12q12");
console.log(result, typeof result);
// 1212 number
function myParseInt( value ){
  return +value.match( /-?\d+/g ).join( '' );
}
应该返回一个字符串。您需要将该字符串转换为一个数字

话虽如此,您可以像这样重写您的函数:

function myParseInt(value) {
    // strip all non-digit characters from string
    // cast the resulting string to a number
    return Number(value.replace(/\D/g, ""));
}
var result = myParseInt("sq12q12");
console.log(result, typeof result);
// 1212 number
function myParseInt( value ){
  return +value.match( /-?\d+/g ).join( '' );
}

只需执行a
return+myNumbers.join(“”)

只需执行a
返回+myNumbers.join(“”)

如果您真的想自己进行字符串到整数/数字的转换,您可以这样做(但其他解决方案更简单):


如果您真的想自己进行字符串到整数/数字的转换,您可以这样做(但其他解决方案更简单):


诀窍是向后遍历字符串并获得字符的整数值。然后将字符与数字(1,10,100,…)中的当前位置相乘

要获取字符的整数值,可以减去表示ASCII表中“0”符号值的“0”字符。通过这样做,您将得到一个0-9之间的数字。如果得到的值不在0-9之间,可以直接跳过它

function parseIntCustom(toParse) {
    var out = 0;
    var factor = 1;
    for (var X = toParse.length - 1; X >= 0; X--) {
       var char = toParse.charAt(X) - '0';
       if(char >= 0 && char <= 9){
           out += char * factor;
           factor *= 10;
       }
    }
    return out;
}

console.log(parseIntCustom("123TEST123123"));
函数parseIntCustom(toParse){
var out=0;
var系数=1;
对于(变量X=toParse.length-1;X>=0;X--){
var char=toParse.charAt(X)-“0”;

如果(char>=0&&char,技巧是向后遍历字符串并获得字符的整数值。然后将字符与数字(1,10,100,…)中的当前位置相乘

要获取字符的整数值,您可以减去表示ASCII表中“0”符号值的“0”字符。这样,您将得到一个0-9之间的数字。如果您获取的值不在0-9之间,您可以跳过它

function parseIntCustom(toParse) {
    var out = 0;
    var factor = 1;
    for (var X = toParse.length - 1; X >= 0; X--) {
       var char = toParse.charAt(X) - '0';
       if(char >= 0 && char <= 9){
           out += char * factor;
           factor *= 10;
       }
    }
    return out;
}

console.log(parseIntCustom("123TEST123123"));
函数parseIntCustom(toParse){
var out=0;
var系数=1;
对于(变量X=toParse.length-1;X>=0;X--){
var char=toParse.charAt(X)-“0”;

如果(char>=0&&char您需要使用数组?,可以使用RegExp
+value更快地完成。替换(/\D/g')
。使用数组也可以这样做:

var myParseInt=(值)=>+[…值].filter(Number).join(“”)

console.log(myParseInt('sq12q12'))
您需要使用数组吗?可以使用RegExp
+value更快地完成。替换(/\D/g')
。使用数组也可以这样做:

var myParseInt=(值)=>+[…值].filter(Number).join(“”)

console.log(myParseInt('sq12q12'))
您可以使用正则表达式
/[+-]?\d+/
匹配整数(但是,在这种情况下,前导的
+
是多余的,因此可以将其缩短为
/-?\d+//code>),然后可以使用多种方法将其转换为数字:

  • +x
  • x|0
  • x*1
  • parseInt(x,10)
  • 编号(x)

  • y=0;x='-234';对于(x中的var i){if(0可以使用正则表达式
    /[+-]?\d+/
    匹配整数(但是,在这种情况下,前导的
    +
    是多余的,因此可以将其缩短为
    /-?\d+/
    ),然后可以使用多种方法将其转换为数字:

    • +x
    • x|0
    • x*1
    • parseInt(x,10)
    • 编号(x)

    • y=0;x='-234';for(vari in x){if(0)使用正则表达式不是更容易吗?比如:
      +('sq12sq12'.replace(/[^0-9]/g',);
      请看@ben使用正则表达式是一个有趣的想法。谢谢你的提示。使用正则表达式难道不更容易吗?比如:
      +('sq12sq12'.replace(/[^0-9]/g'))
      参见@ben使用正则表达式是一个有趣的想法。谢谢你的提示。