문제

나는 로컬 스토리지 배열에 저장하기 위해 2 차원 배열을 문자열로 변환하려고합니다. 그러나이 코드에는 다음과 같은 문제가 있습니다.

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

내가 뭘 잘못하고 있는지 아이디어가 있습니까?

무엇이 잘못되었는지에 관해서는 다차원 배열에 의해 배열 [0] [1] 등을 의미합니다. LocalStorage에 입력하면 모든 '문자열'이 IS @로 축소되며 @의 다른쪽에 여전히 배열이 있음을 암시합니다.

도움이 되었습니까?

해결책

무엇이 잘못 되었습니까? 확실히, 당신은 당신의 입력이 무엇인지, 당신이 기대했던, 그리고 바람직하지 않은 출력이 무엇인지 말합니다.

적어도 IF array 실제로 배열이므로 사용해서는 안됩니다. for..in loop. 그것은 물체를위한 것입니다. 그냥 사용하십시오

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

다른 팁

요즘 이것은 다음과 같이 간단합니다.

[[1,2],[3,4]].map(e => e.join(':')).join(';'); // 1:2;3:4

JSON 이제 현대식 브라우저에서 표준입니다. 이를 사용하여 "Stringify"(JSON 문자열로 변환) 및 JSON 문자열에서 "Parse"를 변환 할 수 있습니다.

당신은 사용할 수 있습니다 JSON.stringify 2D 배열을 JSON으로 변환하는 기능을하고 localStorage. 그런 다음 사용할 수 있습니다 JSON.parse 배열로 다시 변환합니다.

var my2DArray = [[1, 2, 3], [4, 5, 6]];
var stringified = JSON.stringify(my2DArray);
localStorage[key] = stringified;

var backToOriginal = JSON.parse(localStorage[key]);

JavaScript에는 2 차원 배열이 없습니다. 그것은 단지 격렬한 배열이 있습니다. 귀하의 코드는 적절한 입력을 위해 나에게 작동합니다.

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

산출:

1`2@3`4

어떤 입력을 사용하고 어떤 출력을 얻을 수 있습니까?

당신의 코드는 Firefox에서 테스트하고 나에게 잘 작동하는 것 같습니다.

특정 브라우저에서 실패합니까?

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top