좋은 질문입니다. 귀하의 요구 사항을 감안할 때 진행 방법에 대한 선택의 여지가 많지 않습니다. ThatBlairGuy가 제안했듯이, 비트 맵이가는 길일 것 같습니다. 300 가지 선택 사항이 300 비트로 변환됩니다. 이제는 저장 목적으로 base64로 빠르고 쉽게 변환하기 위해 개인적으로 바이트 당 6 비트만을 사용하도록 고수합니다. 드롭 다운에서 오는 값은 300/6 = 50 자입니다.
선호도 값은 하드 코딩해야하지만 중간에 제거하거나 추가 할 수는 없습니다. 비트 맵 끝에 새로운 환경 설정을 추가해야합니다. 더 이상지도의 어딘가에서 사용되지 않습니다.
편집 : 댓글을 다시 입력하십시오. 비트 맵에서는 구현을 위해 내가 염두에 두었던 것을 살려 낼 것입니다.각각의 특정 옵션 (드롭 박스의 항목)의 오프에 스위치에 해당하는 비트를 가정 :
this.bitmap = [];
this.customBase64code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-";
...
// index=index of bit within bit map, on=state of the bit
this.setOption=function(index,on) {
var islot = Math.floor(index/6);
var ibit = index % 6;
if (this.bitmap[islot] === undefined) {
while (this.bitmap.length <= islot) {
this.bitmap.push(0);
}
}
if (on) {
this.bitmap[islot] |= (1 << ibit);
}
else {
this.bitmap[islot] &= ~(1 << ibit);
}
};
this.getOption=function(index) {
var islot = Math.floor(index/6);
if (this.bitmap[islot] === undefined) {
return 0;
}
return this.bitmap[islot] & (1 << (index % 6));
};
this.getStringFromOptions=function() {
var bitmap64 = [];
var encoder64 = customBase64code.split('');
var n = this.bitmap.length;
for (var i = 0; i < n; i++) {
bitmap64.push(encoder64[this.bitmap[i]]);
}
return bitmap64.join('');
};
this.getOptionsFromString=function(s) {
var bitmap64 = s.split('');
var decoder64 = this.customBase64code;
var n = bitmap64.length;
for (var i = 0; i < n; i++) {
this.bitmap.push(decoder64.indexOf(bitmap64[i]));
}
};
면책 조항 : 나는 위의 테스트를하지 않았다.
"[쿠키가 오버로드되었습니다"라는 의미는 무엇입니까? 쿠키에 저장해야 할 수도있는 4k 개 이상의 데이터 (단일 쿠키에 저장할 수있는 양)가 있습니까? 각 고유 값이 단지 8자인 경우, 이는 약 500 개의 값/기본 설정으로 하나의 쿠키에 저장할 수 있습니다. –
여기에 설명 된 것과 같이 쿠키 당 허용되는 최대 문자 수는 아마도 다음과 같습니다. http://stackoverflow.com/questions/283774/maximum-number-of-cookies-allowed/283983#283983 – pr1001
안녕하세요, 데이빗, 예, 이미 쿠키 다른 데이터도 있습니다. 따라서 사용자가 비트 마스크 제안을 위해 – jaan