2012-01-06 2 views
0

예를 들면 나는 이와 같은 것을 가지고 있습니다.간단한 방법 가져 오기 및 내보내기 및 저장 배열

var Ar : Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

그리고 간단한 텍스트 파일에 저장해야합니다. 이처럼

ArText : String ; 
ArtText = "0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

당신은 요점이 있습니다.

Array를 읽을 수있는 문자열로 변환 한 다음 다시 가져 오는 가장 좋은 방법은 무엇입니까? 자바 스크립트 코드가 가장 좋지만 거의 비슷하게 사용할 수 있습니다. 이 배열의 단지 문자열의 경우

+2

참조 http://www.w3schools.com/jsref/jsref_tostring_array.asp, http://www.w3schools.com/jsref/jsref_join.asp 및 http://www.w3schools.com /jsref/jsref_split.asp – Stefan

답변

0

, 당신은 쉼표로 구분 된 문자열을 만들 수 Array 개체에 join() 방법을 사용하고 배열로 다시 문자열을 변환 할 String 개체에 split() 방법을 사용할 수 있습니다.

var Ar = new Array; 
Ar[0] = 'apple'; 
Ar[3] = 'pineapple'; 
Ar[12] = 'car'; 
Ar[33] = 'dog'; 
Ar[41] = 'cat'; 
Ar[21] = 'apple'; 

var stringRepresentation = Ar.join(","); 
var backToArray = stringRepresentation.split(";"); 

여기서 볼 수 있습니다. http://jsfiddle.net/ykQRX/. 참고 잘못된 JavaScript (var Ar = new Array;)도 수정했습니다.

+0

이 "사과 ,,, 파인애플 ,,,,,,,,, 자동차 ,,,,,,,,, 사과와 같은 귀하의 코드가 출력 문자열 ,,,,,,,,,, ,,,,,,,,,,,, 고양이. 나는 "1-apple, 3-pineapple ..."처럼 더 컴팩트 한 것을 필요로합니다. – rendom

4

내 초기 충동 JSON에 직접 변환 할 수 있었다, 그러나 나는 JSON.stringify()이 같은 반환 것을 깨달았다 : 배열이 정의되지 않은 슬롯의 무리를 가지고

["apple",null,null,"pineapple",null,null,null,null,null,null,null,null,"car",null,null,null,null,null,null,null,null,"apple",null,null,null,null,null,null,null,null,null,null,null,"dog",null,null,null,null,null,null,null,"cat"] 

때문에 모든 null JSON 아무튼 때문에 될 정의되지 않은 값을 지원하지 않습니다. 당신이 null이 아닌 정의되지 않은 배열로 끝날 것이라고 배열로 다시 변환 할 때를 제외하고는 저장할 필요가 있다면 괜찮을 것입니다. 그렇기 때문에 (큰 문제는 아니지만) 모든 것을 허용해야합니다. 당신이 그것을 인간이 읽을 수 있기를 바라는 것처럼 들리는 경우도 있습니다.

대신 개체로 변환 한 다음 JSON.stringify()을 사용하여 개체를 JSON으로 변환하는 것이 좋습니다. 다시 변환하려면 JSON.parse()을 사용하여 문자열을 객체로 변환 한 다음 객체 속성을 반복하여 희소 배열을 만듭니다.

이 같은 JSON 문자열을 초래할 것이라고 제안하고있어 무엇 :

{"0":"apple","3":"pineapple","12":"car","21":"apple","33":"dog","41":"cat"} 

코드 :

function sparseArrayStringify(arr) { 
    var obj = {}, 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      obj[i] = arr[i]; 
    return JSON.stringify(obj); 
} 

function parseToSparseArray(str) { 
    var arr = [], 
     obj = JSON.parse(str), 
     k; 
    for (k in obj) 
     arr[k] = obj[k]; 
    return arr; 
} 

var stringifiedArray = sparseArrayStringify(Ar); // where Ar is your array 

// and change it back 
var anArray = parseToSparseArray(stringifiedArray); 

근무 데모 : http://jsfiddle.net/XXqVD/

참고 : 내 parseToSparseArray()에서 함수 구문 분석중인 문자열의 개체 속성이 실제로 non-neg인지 테스트하지 않았습니다. ative 정수이지만 원할 경우 추가 할 수 있습니다.

최신 브라우저는 연결된 방법으로 JSON 개체를 지원하거나 이전 브라우저의 경우 json2.js 라이브러리를 포함 할 수 있습니다.

그러나 귀하의 질문에있는 코드는 유효하지 않습니다. JavaScript : JS에 유형이있는 변수를 선언 할 수 없습니다. 배열, 객체 등을 선언하는 방법은 내 코드의 예제를 참조하십시오.

편집 : 좋아, 왜 JSON 버전이 잘 알려진 표준 형식 일 때 비 JSON 버전을 원할지 모르겠다.하지만 여기서는 JSON 버전의 형식을 읽고 쓰는 테스트되지 않은 함수가 있습니다. 질문 : 배열 요소 중 하나가 쉼표 나 하이픈을 포함 할 경우 제안 형식이 작동하지 않습니다

"0-Apple,3-pineapple,12-car,33-dog,41-cat,21-apple" 

참고. 그래서 JSON이 당신이 가야 할 길입니다. 어쨌든 :

function serialiseArray(arr) { 
    var workingArray = [], 
     i; 
    for (i=0; i < arr.length; i++) 
     if (typeof arr[i] != "undefined") 
      workingArray.push(i + "-" + arr[i]); 
    return workingArray.join(","); 
} 

function deserialiseArray(str) { 
    var arr = [], 
     items = str.split(","), 
     item, 
     i; 
    for (i=0; i < items.length; i++) { 
     item = items[i].split("-"); 
     arr[item[0]] = item[1]; 
    } 
    return arr; 
} 
+0

예. 하지만 JSON이 없으면 어떨까요? – rendom

관련 문제