如何将一个字符串split()到一个整数数组

Rul*_*ure 13 javascript arrays string integer split

我有一个应该作为数组执行的字符串:

var q = "The, 1, 2, Fox, Jumped, 3, Over, 4";
var z = q.split(',');
Run Code Online (Sandbox Code Playgroud)

如果我使用split(),它将创建一个字符串数组:

[‘The’, '1', '2', ‘Fox’, ‘Jumped’, '3', ‘Over’, '4'] 
Run Code Online (Sandbox Code Playgroud)

我不需要那个.我需要一个像这样的数组:

[‘The’, 1, 2, ‘Fox’, ‘Jumped’, 3, ‘Over’, 4]
Run Code Online (Sandbox Code Playgroud)

指示哪个是字符串,哪个是数字.

und*_*ned 15

一种选择是使用Number返回数字的构造函数或NaN:

var res = q.split(',').map(el => {
  let n = Number(el);
  return n === 0 ? n : n || el;
});

// > "The, 1, 2, Fox, Jumped, 3.33, Over, -0"
// < ["The", 1, 2, " Fox", " Jumped", 3.33, " Over", -0]
Run Code Online (Sandbox Code Playgroud)

编辑:如果上述情况令人困惑,您可以使用Bergi建议的以下条件替换它:

return isNaN(n) ? el : n;
Run Code Online (Sandbox Code Playgroud)

如果您想修剪字符串元素,您还可以使用以下String.prototype.trim方法:

return isNaN(n) ? el.trim() : n;
Run Code Online (Sandbox Code Playgroud)

  • 这种情况真的令人困惑.你为什么不明确地`return isNaN(n)?el:n;`? (5认同)

the*_*eye 6

  1. 您可以使用Number函数将字符串化数字转换为实际数字。
  2. 如果Number函数NaN无法将字符串转换为数字,则该函数将返回。

你可以利用这两个事实对我们有利,写出这样的东西

"The, 1, 2, Fox, Jumped, 3, Over, 4".split(/\s*,\s*/g).map(d => Number(d) || d);
// [ 'The', 1, 2, 'Fox', 'Jumped', 3, 'Over', 4 ]
Run Code Online (Sandbox Code Playgroud)

由于NaNis Falsy ( Boolean(NaN)is false),如果Number无法将字符串转换为数字,则将按原样返回实际值。