Javascript:如何强制.split()创建numArray?

use*_*454 2 javascript

这只是一个例子,我有更多的数据:

var str = "3.0;4.5;5.2;6.6";
var res = str.split(";");
console.log(res);
Run Code Online (Sandbox Code Playgroud)

输出将是一个字符串数组.如何在不通过现有阵列的情况下获得数组?

T.J*_*der 6

...没有再次通过现有阵列?

这很棘手.你不能用split,因为split产生一个字符串数组.您可以使用正则表达式在单个传递中执行此操作,自己构建数组:

var rex = /[^;]+/g;
var str = "3.0;4.5;5.2;6.6";
var match;
var res = [];
while ((match = rex.exec(str)) != null) {
  res.push(+match[0]);
}
console.log(res);
Run Code Online (Sandbox Code Playgroud)

或者实际上,这比必要的开销更大,indexOf而且substring会做:

var str = "3.0;4.5;5.2;6.6";
var start = 0, end;
var res = [];
while ((end = str.indexOf(";", start)) !== -1) {
  res.push(+str.substring(start, end));
  start = end + 1;
}
if (start < str.length) {
  res.push(+str.substring(start));
}
console.log(res);
Run Code Online (Sandbox Code Playgroud)

KooiInc的答案用于replace为我们做循环,这很聪明.


也就是说,除非你有一个真正庞大的数组,再次通过数组更简单:

var res = str.split(";").map(entry => +entry);
Run Code Online (Sandbox Code Playgroud)

在上面,我使用一元从字符串转换为数字+.这只是众多方式中的一种,它们有利有弊.我对这个答案中的选项做了简要介绍.

  • `while((match = rex.exec(str))`=>好吧,你不会通过现有的'Array`,我会给你的,但你不是要通过一个新的'Array` (比赛)?也许看看_transducers_(https://medium.com/javascript-scene/transducers-efficient-data-processing-pipelines-in-javascript-7985330fe73d)? (2认同)

Mam*_*mun 5

你可以使用map():

var str = "3.0;4.5;5.2;6.6";
var res = str.split(";").map(Number);
console.log(res);
Run Code Online (Sandbox Code Playgroud)

  • @ C4mps - 不,再次,它确实与OP说他们**不想要的一样.您可以绝对地将该字符串中的数字转换为一个数字数组.请参阅Nick Parson的答案(虽然它确实通过*数据*,但不是数组),或者我的(真正的单通). (3认同)
  • @Cotmps - 可能是因为OP专门说*"......**而不再通过现有阵列**"*.这正是OP所说他们不想做的事情.否则,该问题将与大约50个其他问题重复. (2认同)