在JavaScript中将字符串转换为二维数组

6

我正在尝试转换这样的字符串"10|15|1,hi,0,-1,bye,2",其中前两个元素10|15的含义与1,hi,0,-1,bye,2不同。我想将它们彼此分开。实现这一目标的一种天真方法是:

value = string.split("|");
var first = value[0];
var second = value[1];
var tobearray = value[2];
array = tobearray.split(",");

当然,如果您知道更好的方法,我很乐意了解。 然而,array是一个包含array[0]=1,array[1]=hi,array[2]=0,array[3]=-1等的数组。但是,我想获得一个二维数组,例如:
array[0][0]=1, array[0][1]=hi, array[0][2]=0
array[1][0]=-1, array[1][1]=bye, array[1][2]=2

有没有任何方法可以做到这一点?谢谢。

你为什么想要一个多维数组而不是一个类似稀疏数组的对象 {10: [1,'hi',0], 15: [-1,'bye',2]}? - kojiro
@kojiro:嗯,我之前使用的是google-dif-match-patch,它会生成array(array())这样的数组,为了保持一致性,我选择使用多维数组。 - r_31415
@Robert 哦,我明白了。只是好奇! - kojiro
@kojiro: 没问题。我需要担心性能吗? - r_31415
不过如果你的数组确实很小,那就无所谓了! ;) 说真的,我预计对象比数组效率低一些,但根据使用情况,可能更容易处理。 - kojiro
@kojiro:每个数组的大小都很小(3个元素),但是初始数组的数量可能相当大。 - r_31415
3个回答

16

首先可以提前提取出前两个元素(10|15)。然后你剩下的是:

var a = "1,hi,0,-1,bye,2";

让我们一直剪接,直到什么都没有剩余:

var result = [];

a = a.split(','); 

while(a[0]) {
    result.push(a.splice(0,3));
}

result; // => [["1","hi","0"],["-1","bye","2"]]

3
function getMatrix(input_string) 
{
    var parts = input_string.split('^');
    for (var t=0; t<parts.length; t++)
    {
        var subparts = parts[t].split('*');

        parts[t] = subparts.splice(0,subparts.length);              
    }

    return parts;
}

2
function getMatrix(input_string) {
    var parts = input_string.split('|');
    var subparts = parts.pop().split(',');
    var partlen = subparts.length / parts.length;
    for (var i=0; i<parts.length; i++) {
        parts[i] = subparts.splice(0,partlen);
    }
    return parts;
}

哦,非常好!不幸的是,J-P之前发布了一个非常好的解决方案。+1,谢谢:-) - r_31415

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接