js 거품 정렬 가시 화 실현 에 대한 사고방식 분석

6428 단어
수요 분석
  • 두 구역:
  • 조작 구역: 조작 가능 한 구역
  • 표현 구역: 데 이 터 를 시각 화 하 는 구역
  • 두 모듈 (조작 구역 내):
  • 입력 모듈: 데이터 입력 가능 한 모듈
  • 기능 모듈: 선택 가능 한 기능 모듈
  • 다섯 가지 기능 (기능 모듈 내):
  • 데이터 삽입 기능
  • 데이터 삭제 기능
  • 무 작위 데이터 생 성 기능 (1 ~ 100)
  • 데이터 정렬 기능 (거품 정렬)
  • 데이터 정렬 기능 흐 트 러 짐
  • 기능 실현 구상 흐름 도
    흐름 도
    구체 적 인 분석 기본 방향: 데 이 터 를 배열 dataList [] 에 저장 하고 수요 에 따라 배열 을 조작 하 며 작업 후의 배열 을 웹 페이지 (즉 데이터 시각 화) 실현 과정
  • 에 함수
  • 를 추가 합 니 다. 렌 더 링 함수 렌 더 링 함수 주 는 dom 작업 을 통 해 데 이 터 를 문서 에 추가 합 니 다.데이터 시각 화 에 대해 저 는 div 를 데이터 bar 로 사용 합 니 다. 데이터 의 크기 에 따라 모든 div 에 높이 를 동적 으로 설정 하고 모든 div 에 배경 색 을 추가 합 니 다. 그러면 웹 페이지 에서 보면 기둥 모양 그림 과 같 습 니 다.

    function render(){

    var numList = document.getElementById("num-list");

    // numList

    numList.innerHTML = "" ;

    for(var m = 0; m < dataList.length; m++){

    numList.innerHTML += "

    " + "
    " ;

    // div nodelist

    var dataDiv = numList.querySelectorAll("div");

    // div

    dataDiv[m].style.height = dataList[m]*5 + "px";

    }

    }

  • 정렬 함 수 를 어 지 럽 히 는 것 은 js 의 배열 이 매우 강하 고 자체 테이프 sort() 방법 이기 때문에 우 리 는 무 작위 로 - 1 (순서) 또는 1 (순서) 만 생 성 하면 sort 방법 은 자동 으로 배열 을 처리 할 수 있 습 니 다.
    function randomSort(){ 
     

    return Math.random()>0.5?-1:1;

    }

  • 무 작위 생 성 함 수 는 정렬 함수 와 같 습 니 다. 이 함수 에서 도 Math.random() 방법 을 사 용 했 습 니 다. 이 방법 은 무 작위 로 [0, 1) 범위 내의 숫자 를 생 성하 고 조금 만 변화 하면 원 하 는 [1, 100] 내의 무 작위 수 를 얻 을 수 있 습 니 다.

    function randomGeneration(){

    for(var x=0; x<19; x++){
    dataList[x] = parseInt(Math.random()*100+1);
    }
    }

  • 거품 정렬 함수

    function sortNum(arr){

    for (var i = arr.length-1; i > 0; i--) {

    for(var j = 0; j < i; j++){

    if (arr[j] > arr[j+1]) {

    var temp = arr[j];

    arr[j] = arr[j+1];

    arr[j+1] = temp;

    // state ,state

    state.push(JSON.parse(JSON.stringify(arr)));

    }

    }

    }

    }

    이 정렬 함수 에 대해 서 는 설명 할 부분 이 많 지 않 습 니 다. 간단 한 거품 정렬 입 니 다. 특히 뒤의 state 는 하나의 배열 입 니 다. JSON 데이터 형식 을 통 해 매번 이동 한 데이터 의 상 태 를 state 에 저장 합 니 다. 그 다음 에 저 희 는 이 state 에 따라 조작 하여 데이터 bar 가 정렬 과정 에 따라 이동 하 는 것 을 실현 합 니 다.시각 효과.
  • 각 단추 바 인 딩 이벤트 에 초기 함수 init() 를 설정 하고 init() 에서 각 단추 에 이 벤트 를 바 인 딩 한 다음 마지막 에 init() 함 수 를 호출 하면 됩 니 다.

    btn.onclick = function(){

    //

    }

    구체 적 으로 말 하면 모두 7 개의 버튼 이 있어 서 다섯 가지 기능 을 실현 한다. 그들 은 각각 왼쪽으로 데 이 터 를 삽입 하고 오른쪽으로 데 이 터 를 삽입 하 며 왼쪽 에서 데 이 터 를 삭제 하고 오른쪽 에서 데 이 터 를 삭제 하 며 거품 정렬, 정렬 을 어 지 럽 히 고 무 작위 로 데 이 터 를 생 성 한다.
  • 왼쪽으로 데 이 터 를 삽입 하면 dom 작업 을 통 해 사용자 가 입력 한 데 이 터 를 얻 은 다음 에 배열 의 unshift() 을 통 해방법, 데 이 터 를 배열 좌표 가 작은 쪽 (즉 앞 / 왼쪽) 에서 배열 에 삽입 한 다음 에 배열 을 페이지 에 렌 더 링 합 니 다.

    inleftBtn.onclick = function(){

    var data = document.getElementById("num- input").value.trim();

    dataList.unshift(data);

    render();
    }

    오른쪽 에 데 이 터 를 삽입 하 는 작업 은 같은 이치 로 배열 push() 방법 을 사용 하 는 것 과 차이 가 있 습 니 다.
  • 왼쪽 에서 데 이 터 를 삭제 하고 데 이 터 를 삭제 하 는 작업 도 데 이 터 를 삽입 하 는 작업 과 비슷 하 다. 원리 도 배열 을 처리 한 후에 렌 더 링 하 는 것 이다.

    outLeftBtn.onclick = function(){

    var data = document.getElementById("num-input").value.trim();

    dataList.shift(data);

    render();

    }

    shift() 방법 은 배열 전방 (시각 효 과 는 왼쪽) 에서 배열 요 소 를 삭제 하 는 데 도움 을 준다. 오른쪽 에서 배열 을 삭제 하 는 방법 pop()
  • 거품 정렬
    sort.onclick = function(){ 
     

    sortNum(dataList);

    var int = setInterval(forSortRender, 100);

    //

    function forSortRender(){

    var s ;

    s = state.shift();

    var numList = document.getElementById("num-list");

    numList.innerHTML = "" ;

    if (s !== undefined) {

    for(var m = 0; m < s.length; m++){

    numList.innerHTML += "

    " + "
    " ;

    // div nodelist

    var dataDiv =
    numList.querySelectorAll("div");

    // div

    dataDiv[m].style.height = s[m]*5 + "px";

    }

    }

    // state ,

    else{

    render();

    window.clearInterval(int);

    }

    }

    }

    앞서 언급 했 듯 이 거품 정렬 함 수 를 쓸 때 state 배열 을 만 들 었 습 니 다. 정렬 된 배열 상 태 를 저장 하 는 데 사 용 됩 니 다. 이 제 는 사용 할 때 가 되 었 습 니 다. 정렬 과정 을 위 한 렌 더 링 함수 에서 shift()방법 은 state 의 첫 번 째 배열 을 팝 업 합 니 다. 즉, 첫 번 째 교환 후의 배열 을 하고 이 를 되 돌려 변수 s 로 저장 합 니 다. 이때 s 의 데 이 터 를 페이지 에 순서대로 렌 더 링 합 니 다. setInterval() 방법 은 100 ms 마다 이 렌 더 링 함 수 를 호출 합 니 다. 따라서 100 ms 이후 state 는 맨 앞 에 있 는 배열 을 팝 업 합 니 다. 이 배열 은 원래 의 dataList [] 입 니 다.두 번 교환 한 후의 배열 을 보 여 주 었 습 니 다. 우 리 는 시각 적 으로 데이터 바 가 이동 하고 있다 는 착각 을 가지 게 되 었 습 니 다. 이렇게 교환 횟수 의 배열 이 팝 업 된 후에 state []비어 있 으 면 s 가 값 을 찾 지 못 하면 정렬 이 완 료 된 후 페이지 가 갑자기 비어 있 을 수 있 습 니 다. 따라서 if 조건 을 설정 합 니 다. s 의 값 이 undefined 일 때 원래 렌 더 링 함수 render() 를 사용 하여 정렬 된 원 배열 dataList [] 를 렌 더 링 하고 clearInterval() 정렬 에 만 적 힌 forSortRender() 함수 호출 을 중단 합 니 다.

  • 개선 해 야 할 부분
  • 클릭 이벤트 가 우아 하지 않 습 니 다. 버튼 마다 한 줄 onclick() 을 써 야 합 니 다. addEventLister() 방법 을 사용 하면 많이 좋 을 것 같 습 니 다.
  • div 상자 로 데이터 바 를 실현 하 는 것 은 간단 하고 거 친 것 같 습 니 다. 잠시 더 좋 은 방법
  • 을 생각 하지 못 했 습 니 다.렌 더 링 함 수 는 두 번 이나 썼 습 니 다. 이 기능 은 성능 이 필요 하지 않다 는 뜻 입 니 다. 개선 할 수 있 을 것 같 습 니 다.
  • 사용자 가 데 이 터 를 입력 할 때 처리 하지 않 아 불법 문 자 를 받 을 수 있 습 니 다. 이것 은 추가 할 기능 입 니 다. 정규 표현 식 이 체계 적 으로 학습 되 지 않 았 기 때문에 기 회 를 봐 서 열심히 공부 하고 다시 고 치 려 고 합 니 다.
  • 빠 른 배열, 간단 한 정렬 선택 등 다른 정렬 방식 을 추가 해 야 합 니 다. 데이터 구 조 를 공 고 히 하 는 지식
  • 은 스타일 을 개선 하고 색상 선택 기능 을 추가 해 야 합 니 다. 전단 작업 자 는 언제든지 자신 이 가지 고 있 는 인터페이스 에 소홀 해 서 는 안 됩 니 다!
  • 이번 demo 연습 을 통 해 많은 js 와 dom 분야 의 지식 을 배 웠 습 니 다. 소 백 은 만족 하지만 실현 이 비교적 거 칠 고 개선 해 야 할 부분 도 많 습 니 다. 학습 의 길 은 갈 길이 멀 습 니 다. 화 이 팅!↖(ω)↗
    demo 주소https://github.com/escawn/dailyDemo/tree/master/jsVisualSort

    좋은 웹페이지 즐겨찾기