I'm trying to convert a two-dimensional array to a string in order to store it in the localStorage array. However, there is something wrong with this code I cannot identify:

for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
localStorage[key] = string;

Does anyone have an idea what I'm doing wrong?

As for what's wrong, by multidimensional array I mean array[0][1] etc. When input into localStorage, all the 'string' is reduced to is @, implying on the other side of the @ there are still arrays.

link|flag

2  
what is the something that is wrong? surely, you ucan say what your input is, what you expected, and what the undesired output is? – Roland Bouman Jan 6 at 20:58
On a sidenote, you might want to consider using JSON.stringify instead of custom seperators for your purpos. – Tomas Nov 2 at 12:28
@Thomas - At the time of writing, JSON.stringify was not available in all the browsers (specifically, not in the stable build of Chrome). Now, I would use that, yes. – Arda Xi Nov 2 at 22:53

3 Answers

up vote 3 down vote accepted

what is the something that is wrong? surely, you ucan say what your input is, what you expected, and what the undesired output is?

At least, if array is indeed an array, you should not use a for..in loop. That's for objects. Just use a

for (var i=0, l=array.length; i<l; i++){
    if (array[i] instanceof Array){
        array[i] = array[i].join("`");
    }
}
link|flag

Javascript doesn't have two dimensional arrays. It has only ragged arrays. Your code works for me for an appropriate input:

array = [[1,2],[3,4]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
alert(string);

Output:

1`2@3`4

Could you show us what input you are using and what output you get?

link|flag

Your code seems to work fine for me, testing in Firefox.

Is it failing in a specific browser?

var array = [
["a","b"],
["c","d","e"]];
for(x in array) {
    if(array[x] instanceof Array) {
        array[x] = array[x].join("`");
    }
}
var string = array.join("@");
console.log(string);
link|flag

Your Answer

 
or
never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.