Title: 百度:手写parseInt的实现,要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number() · Issue #89 · sisterAn/JavaScript-Algorithms · GitHub
Open Graph Title: 百度:手写parseInt的实现,要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number() · Issue #89 · sisterAn/JavaScript-Algorithms
X Title: 百度:手写parseInt的实现,要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number() · Issue #89 · sisterAn/JavaScript-Algorithms
Description: 返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回 NaN。 注意:radix 参数为 n 将会把第一个参数看作是一个数的 n 进制表示,而返回的值则是十进制的。例如: parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 => 3*5^0 + 2*5^1 + 1*5^2 = 38 以下 2 进制没有问题 function _parseInt(str, radix) { let str_type = typeo...
Open Graph Description: 返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回 NaN。 注意:radix 参数为 n 将会把第一个参数看作是一个数的 n 进制表示,而返回的值则是十进制的。例如: parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 => 3*5^0 + 2*5^1 + 1*5^2 = 38 以下 2 进制没有问题 function _par...
X Description: 返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回 NaN。 注意:radix 参数为 n 将会把第一个参数看作是一个数的 n 进制表示,而返回的值则是十进制的。例如: parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 => 3*5^0 + 2*5^1 + 1*5^2 = 38 以下 2 进...
Opengraph URL: https://github.com/sisterAn/JavaScript-Algorithms/issues/89
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"百度:手写parseInt的实现,要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number()","articleBody":"返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回 [`NaN`](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/NaN)。\r\n\r\n注意:`radix` 参数为 `n` 将会把第一个参数看作是一个数的 `n` 进制表示,而返回的值则是十进制的。例如:\r\n\r\n```js\r\nparseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 =\u003e 3*5^0 + 2*5^1 + 1*5^2 = 38\r\n```\r\n\r\n以下 2 进制没有问题\r\n\r\n```js\r\nfunction _parseInt(str, radix) {\r\n let str_type = typeof str;\r\n let res = 0;\r\n if (str_type !== 'string' \u0026\u0026 str_type !== 'number') {\r\n // 如果类型不是 string 或 number 类型返回NaN\r\n return NaN\r\n }\r\n\r\n // 字符串处理\r\n str = String(str).trim().split('.')[0]\r\n let length = str.length;\r\n if (!length) {\r\n // 如果为空则返回 NaN\r\n return NaN\r\n }\r\n\r\n if (!radix) {\r\n // 如果 radix 为0 null undefined\r\n // 则转化为 10\r\n radix = 10;\r\n }\r\n if (typeof radix !== 'number' || radix \u003c 2 || radix \u003e 36) {\r\n return NaN\r\n }\r\n\r\n for (let i = 0; i \u003c length; i++) {\r\n let arr = str.split('').reverse().join('');\r\n res += Math.floor(arr[i]) * Math.pow(radix, i)\r\n }\r\n\r\n return res;\r\n}\r\n```\r\n\r\n考虑 16 进制,完整版如下\r\n\r\n```js\r\nconst _parseInt = (str, radix) =\u003e {\r\n // 不为string类型先转化为string 类型\r\n if (typeof str !== 'string') str = String(str)\r\n\r\n // 删除首尾空白\r\n str = str.trim()\r\n\r\n // 正则匹配[+|-]?[0]?[Xx]?[0-9a-fA-F]+\r\n const regex = /^(?\u003cfuhao\u003e[\\+|\\-]*)(?\u003cradix\u003e[0]?[Xx]?)(?\u003cnum\u003e[0-9a-fA-F]+)/\r\n\r\n // 无法匹配返回NaN\r\n if (!regex.test(str)) return NaN\r\n\r\n // 匹配出符号、进制、数字三个分组\r\n const groups = str.match(regex).groups\r\n\r\n // radix的有效范围为 2-36\r\n if (radix \u0026\u0026 (radix \u003c 2 || radix \u003e 36)) return NaN\r\n\r\n // 如果没有指定radix, radix 会有以下默认值\r\n if (!radix) {\r\n if (groups.radix.toUpperCase() === '0X') radix = 16\r\n else if (groups.radix === '0') radix = 8\r\n else radix = 10\r\n }\r\n\r\n // 挨个字符串解析,如果遇到无法解析时则停止解析,返回已经解析好的整数\r\n let splitArr = groups.num.split('')\r\n const arr = []\r\n for(let i = 0; i \u003c splitArr.length; i++) {\r\n // 根据charCode来做转行为实际数据, 0-9为[48-57],A-F为[65-70]\r\n const charCode = splitArr[i].toUpperCase().charCodeAt()\r\n let num \r\n\r\n // 字符为[A-F]时, 实际数字为charCode -55\r\n if(charCode \u003e= 65) num = charCode - 55\r\n\r\n // 字符为[0-9]时, 实际数字为charCode - 48\r\n else num = charCode - 48\r\n\r\n // 当实际数字大于radix时, 无法解析则停止字符串遍历\r\n if (num \u003e radix) {\r\n break\r\n } else {\r\n arr.push(num)\r\n }\r\n }\r\n\r\n const len = arr.length\r\n // 当实际数字数组长度为0时, 返回NaN\r\n if(!len) return NaN\r\n let result = 0\r\n\r\n // 依次解析实际数字数组, 组合成真正的数字\r\n for(let i = 0; i \u003c len; i++) {\r\n const num = arr[i] * Math.pow(radix, len - i - 1)\r\n result += num\r\n }\r\n\r\n // 算法匹配到的正负号\r\n return result * (groups.fuhao === '-' ? -1 : 1)\r\n}\r\n```","author":{"url":"https://github.com/sisterAn","@type":"Person","name":"sisterAn"},"datePublished":"2020-07-28T00:17:02.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/89/JavaScript-Algorithms/issues/89"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:a33ba328-18d0-cb10-70de-4b062c4f35b3 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 869C:8D103:12923EE:18C730B:696AD6A8 |
| html-safe-nonce | 00daef3e63cf18744294a35f169ecfaf33fe0820d8dbf8996d44aea99fa54124 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4NjlDOjhEMTAzOjEyOTIzRUU6MThDNzMwQjo2OTZBRDZBOCIsInZpc2l0b3JfaWQiOiIyMzM3ODkwNjY1Mzc1NjUxNDk2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | a3b1c4980bc1589ffb9331bb6f6aa28942a93f8f1bb0cc973953660fbcc3d828 |
| hovercard-subject-tag | issue:666663088 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/sisterAn/JavaScript-Algorithms/89/issue_layout |
| twitter:image | https://opengraph.githubassets.com/5a795a975398776962cb9909eb155027ad370205144a04ea5c783958160e5f57/sisterAn/JavaScript-Algorithms/issues/89 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/5a795a975398776962cb9909eb155027ad370205144a04ea5c783958160e5f57/sisterAn/JavaScript-Algorithms/issues/89 |
| og:image:alt | 返回解析后的整数值。 如果被解析参数的第一个字符无法被转化成数值类型,则返回 NaN。 注意:radix 参数为 n 将会把第一个参数看作是一个数的 n 进制表示,而返回的值则是十进制的。例如: parseInt('123', 5) // 将'123'看作5进制数,返回十进制数38 => 3*5^0 + 2*5^1 + 1*5^2 = 38 以下 2 进制没有问题 function _par... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | sisterAn |
| hostname | github.com |
| expected-hostname | github.com |
| None | c785f4ce187e9e7331257791b36ddee01625bb8e292a9b4fe2c16d4c006abf5d |
| turbo-cache-control | no-preview |
| go-import | github.com/sisterAn/JavaScript-Algorithms git https://github.com/sisterAn/JavaScript-Algorithms.git |
| octolytics-dimension-user_id | 19721451 |
| octolytics-dimension-user_login | sisterAn |
| octolytics-dimension-repository_id | 252061924 |
| octolytics-dimension-repository_nwo | sisterAn/JavaScript-Algorithms |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 252061924 |
| octolytics-dimension-repository_network_root_nwo | sisterAn/JavaScript-Algorithms |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | c718a376fcf780eb22089171adb84a543f660bf7 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width