6

I'm trying to convert a string like this "10|15|1,hi,0,-1,bye,2" where the first two elements 10|15 mean something different than 1,hi,0,-1,bye,2. I would like to separate them from each other. A naive way to accomplish that would be:

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

(Of course, if you know a way to do this in a better way, I'd be glad to know). However, array is an array which contains array[0]=1, array[1]=hi, array[2]=0, array[3]=-1, etc. However, I want to obtain a two dimensional array such as

array[0][0]=1, array[0][1]=hi, array[0][2]=0
array[1][0]=-1, array[1][1]=bye, array[1][2]=2

Is there any way to do that?

Thanks

6
  • Why do you want a multi-d array instead of a sparse array-like object {10: [1,'hi',0], 15: [-1,'bye',2],}? Commented Mar 2, 2011 at 5:50
  • @kojiro: Well, I was using google-dif-match-patch which produces array(array())'s, therefore, in order to maintain consistency I chose to use multidimensional arrays. Commented Mar 2, 2011 at 5:54
  • @Robert ah, I see. Just curious! Commented Mar 2, 2011 at 5:59
  • @kojiro: It's ok. Should I be worry about performance? Commented Mar 2, 2011 at 6:02
  • Not if your arrays are really this small! ;) Seriously, I would expect the object to be less efficient than the array, but depending on use, possibly easier to work with. Commented Mar 2, 2011 at 6:04

3 Answers 3

16

The first two elements (10|15) can be extracted beforehand. After that you're left with:

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

Let's splice until we're left with nothing:

var result = [];

a = a.split(','); 

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

result; // => [["1","hi","0"],["-1","bye","2"]]
Sign up to request clarification or add additional context in comments.

Comments

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;
}

Comments

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;
}

1 Comment

Oh, very nice!. Unfortunately, J-P posted a very good solution earlier. +1, though. Thanks :-)

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.