javascript - 为什么一种看似较长的字符串转 JavaScript 日期方法比另一种看起来更短、更简单的方法更快?

标签 javascript

我想要转换的 JSON 字符串包含 value = "YYYY-MM-DDTHH:MM:SSZ" 格式的日期值,但由于某些技术原因,我不会偏离 new Date(value) 不起作用。但是,“YYYY/MM/DD HH:MM:SS” 格式的值将起作用。

此外,使用另一种方法,将值分解为年、月、日、时、分、秒,并使用这些值创建一个新的 Date() 也是可行的。

看似更长的方法,将值分解成几个部分,如下所示:

var ymd = value.split('T')[0].split('-');
var hms = value.split('T')[1].substr(0,8).split(':');
return new Date(ymd[0], ymd[1]-1, ymd[2], hms[0], hms[1], hms[2]);

简单、看起来更简单的方法是这样的:

return new Date(value.replace(/-/g, '/').replace('T', ' ').substr(0,19));

两者都有效,但第一个看起来更复杂,但明显比单行更快。我有一个包含数百个元素的数组,每个元素都包含一个对象,该对象具有原始字符串格式的多个日期值。使用第一种更长远的方法,一切基本上都会立即返回。使用第二种单行方法时,每次返回都会有一两秒的明显停顿。

我只是好奇为什么第一种方法比第二种方法快得多。有什么想法吗?

谢谢。

最佳答案

根据https://medium.com/dailyjs/js-regexp-fast-and-slow-d29d6b77b06

String.split() 的速度比 Regex 快 40 倍,除非满足某些条件导致 Regex 在内部调用 string.split()。

关于javascript - 为什么一种看似较长的字符串转 JavaScript 日期方法比另一种看起来更短、更简单的方法更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327918/

相关文章:

javascript - 更改 Algolia instantsearch.js 统计模板

javascript - 如何通过谷歌登录获取用户名和姓氏?我已经有电子邮件了

javascript - NodeJS 中的嵌套 Promise

javascript - NodeJS 和 Express - 导出函数跳过 SQLite3 DB 查询

javascript - 在 JavaScript 中异步执行循环中的函数 - 在哪里放置 defer.resolve?

javascript - 在 javascript 中更新后,我无法从后面的代码中获取 session 变量

javascript - 排队任务中出现异常 : TypeError: Cannot read property 'length' of null

javascript - 如何在用户选择其他选项时删除选项

javascript - 如何填充剩余的div?

javascript - 从 Javascript 中的回调函数获取变量