Javascript:将字符串拆分为2d数组

dmr*_*dmr 7 javascript arrays string split multidimensional-array

我有一个月和年的字符串:

var months= "2010_1,2010_3,2011_4,2011_7";
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个二维数组,其中年份位于每个数组的第一个位置,月份位于第二个位置.换句话说,我想最终得到这个:

var monthArray2d = [[2010,1],[2010,3][2011,4],[2011,7]];
Run Code Online (Sandbox Code Playgroud)

我目前这样做的方式是:

//array of selected months
var monthArray = months.split(",");

//split each selected month into [year, month] array
var monthArray2d = new Array();
for (var i = 0; i < monthArray.length; i++) {
    monthArray2d[i] = monthArray[i].split("_");
Run Code Online (Sandbox Code Playgroud)

有没有办法压缩该代码,以便我永远不需要使用monthArrayvar?

geo*_*org 11

您可以使用replace以获得更紧凑的代码:

var months= "2010_1,2010_3,2011_4,2011_7";
var monthArray2d = []

months.replace(/(\d+)_(\d+)/g, function($0, $1, $2) {
    monthArray2d.push([parseInt($1), parseInt($2)]);
})
Run Code Online (Sandbox Code Playgroud)

映射目标浏览器是否支持它:

monthArray2d = months.split(",").map(function(e) {
    return e.split("_").map(Number);
})
Run Code Online (Sandbox Code Playgroud)

基本上,第一个函数查找年/月模式"数字下划线数字",并将每个找到的子字符串存储在数组中.当然,您可以使用其他分隔符而不是下划线.该函数不关心值的分隔符(逗号),因此它可以是任何东西.例:

var months= "2010/1 ... 2010/3 ... 2011/4";
months.replace(/(\d+)\/(\d+)/g, function($0, $1, $2) {
    monthArray2d.push([parseInt($1), parseInt($2)]);
})
Run Code Online (Sandbox Code Playgroud)


Sha*_*hin 7

如果压缩是你所追求的:

var month_array = months.split(",").map(function(x){return x.split("_")});
Run Code Online (Sandbox Code Playgroud)


Abd*_*nim 5

JavaScript 是另一种动态语言,它的变量类型允许您随意保留任何内容。你做了正确的拆分,现在只需拆分那个字符串_并将其放回那里。

看这个例子:

var months= "2010_1,2010_3,2011_4,2011_7";

var monthArray = months.split(",");

for (var i = 0; i < monthArray.length; i++) {
   monthArray[i] = monthArray[i].split("_");
}

console.log(monthArray);
Run Code Online (Sandbox Code Playgroud)

我不知道你所说的不使用是什么意思monthArray。上面的代码是你至少可以做的,可能!