.split通过将字符串转换为数组来返回NaN

时间:2017-11-02 22:57:10

标签: javascript arrays string split

我需要将包含多个日期的字符串转换为数组。 只要字符串包含数字,这就完美无缺。 包含日期信息的字符串如下所示:

 Wed Nov 01 2017 13:06:56 GMT+0100 (CET),Wed Nov 01 2017 13:07:10 GMT+0100 (CET),Wed Nov 01 2017 13:07:12 GMT+0100 (CET),Wed Nov 01 2017 13:07:13 GMT+0100 (CET),Wed Nov 01 2017 13:07:15 GMT+0100 (CET),Wed Nov 01 2017 13:07:16 GMT+0100 (CET)

我的代码如下:

var times = string.split(",").map(Number);
console.log(times[0]);

不幸的是,这导致:

NaN

我无法解释为什么它不起作用。即使我替换

","

通过

"GMT+"

它仍然不起作用。感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

拆分字符串正常工作。

问题是通过调用.map(Number),您试图将数组的每个元素传递给Number构造函数。这会返回NaN,因为字符串不能直接转换为数字。

例如:

new Number('Wed Nov 01 2017 13:06:56 GMT+0100 (CET)'); // NaN

你可能想要的是.map(Date.parse),因为Date.parse函数可以处理这种格式的字符串。结果将是"数字,表示自1970年1月1日00:00:00 UTC"以来经过的毫秒数。 (MDN

答案 1 :(得分:1)

您实际上 根本不需要使用map();只需使用

 var times = string.split(",");

会为您提供times数组中分割的时间,您可以使用times[0]访问该数据:



var string = 'Wed Nov 01 2017 13:06:56 GMT+0100 (CET),Wed Nov 01 2017 13:07:10 GMT+0100 (CET),Wed Nov 01 2017 13:07:12 GMT+0100 (CET),Wed Nov 01 2017 13:07:13 GMT+0100 (CET),Wed Nov 01 2017 13:07:15 GMT+0100 (CET),Wed Nov 01 2017 13:07:16 GMT+0100 (CET)';
var times = string.split(",");
console.log(times[0]);




答案 2 :(得分:0)

我猜你需要这个:

<强> ES6

let times = string.split(',').map(d => new Date(d));

<强> ES5

var times = string.split(',').map(function (d) { return new Date(d)});