stage_dt =[{stage:2, score:30},{stage:4, score:90},{stage:7, score:45}]
라고 한다면,
1. stage에 원하는 스테이지 값을 넣으면, 그 스테이지의 값을 리턴해준다.
2. stage값이 배열에 없다면, -로 넣어주어야 할 장소를 리턴한다.
3. stage값이 배열에 없고, 배열의 제일 처음에 넣어야 한다면 -1000을 리턴한다.
4. stage값이 배열에 없고, 배열의 제일 끝에 넣어야 한다면 -2000을 리턴한다.
string함수 중 하나인 splice를 써서 배열에 값을 추가해 주었다.
예제 소스는 다음과 같다.
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
 | 
var stage_dt =[{stage:2, score:30},{stage:4, score:90},{stage:7, score:45}] 
var stage = 4; 
var temp_u = {}; 
temp_u.stage = stage; 
temp_u.score = 11; 
var position = find_top_score(stage, stage_dt); 
if(position < 0){ 
    if(position == -1000){ 
        stage_dt.splice(0,0, temp_u); 
    }else if(position == -2000){ 
        stage_dt.splice(stage_dt.length,0, temp_u); 
    }else{ 
        position = position*(-1); 
        stage_dt.splice(position,0, temp_u); 
    } 
}else{ 
    stage_dt[position].score = temp_u.score; 
} 
function find_top_score(stage, stage_dt){ 
    var position = 0; 
    var m_p_f = 0; 
    var stages_size = stage_dt.length; 
    if(stage >= stages_size){ 
        position = stages_size-1; 
    }else{ 
        position = stage -1; 
    } 
    do{ 
        value = stage - stage_dt[position].stage; 
        if(value == 0){ 
            return position; 
        }else if(value < 0){ 
            if(position == 0){ 
                return -1000; 
            }else if(m_p_f == 1){ 
                return ((position+1)*(-1)); 
            }else{ 
                position --; 
                m_p_f = -1; 
            } 
        }else{ 
            if(position == stages_size-1){ 
                return -2000; 
            }else if(m_p_f == -1 ){ 
                return (-1*(position+1)); 
            }else{ 
                position ++; 
                m_p_f = 1; 
            } 
        } 
    }while(true); 
} 
 | cs | 
