본문 바로가기

Javascript/DSA

Array essential with ES6 -2-

포스팅이 늦었습니다.

 

그간 실제 저희 스터디에 진도는 스택까지 나갔습니다.

 

기존에 알고리즘에 대한 지식이 있는 분들로 구성이 되어 있기때문에

 

이책의 부족함을 곳곳에서 찾아낼수 있었고 연습문제에서는

 

실제 원서1와 그 의미가 다른 문제들 그리고 원서엔 나와있지만 번역서엔 나와있지 않은

 

추가 문제들에 대해서 스터디장이 다시 번역을 해서 올려놓고, 그것을 풀어 나가는 식으로 진행

 

하고 있습니다.


연습문제 를 풀고 서로의 코드리뷰 안에서 배워나갈점이 있고 새로운것들이 도출되어 스터디에

 

의미는 있지만 이책은 어느 해외 독자가 남긴 리뷰 대로 기초가 없다면 한번쯤은 볼만 합니다.

 

하지만, 기준으로 삼기엔 부족한감이 있습니다.

 

그래서 책과 다른 내용들이 존재할수 있는데 , 이부분은 제가 생각했거나 혹은 스터디에서 나온

 

별개의 내용들 입니다.. 도움이 된다면 좋겠지만 이해를 하는데 더 복잡한 혼선이 온다면

 

과감히.. 책을 사시길 권장 드립니다. ( 알고리즘에 대한 기초 지식이 없으면 한번쯤 보긴 괜찮습니다.!?)

이차원 배열 만들기

이차원 배열은 이렇게 만든다.

var cols = [];
var rows = 5;
for( var i = 0 ; i < rows ; ++i ){
    cols[i] = [];
}

이경우엔 각 배열의 값에 undefined 가 채워진다. 값을 채워넣기위해서 Array 객체를 함수로 확장시킬수 있다.

Array.matrix = function(numrows, numcols, initial) {
  var arr = [];
  for(var i = 0 ; i < numrows ; ++i){
   var columns = [];
   for(var j = 0 ; j < numcols ; ++j){
    columns[j] = initial;
   }
   arr[i] = columns;
  }
  return arr;
}
var nums = Array.matrix(5,5,0);
console.log(nums);
var names = Array.matrix(3,3,'Joe');
console.log(names);

ES6 문법으로 바꿔보면..fill 을 이용해 값을 채워넣을수있다.

Array.matrix = (numrows, numcols, initial) => new Array(numrows).fill(new Array(numcols).fill(initial));

이차원 배열 요소 처리하기

보편적으론 중첩 for 문을 이용한다.

var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
var total = 0;
var average = 0.0;
for (var row = 0; row < grades.length; ++row) {
  for (var col = 0; col < grades[row].length; ++col) {
    total += grades[row][col];
  }
  average = total / grades[row].length;
  console.log("Student " + parseInt(row+1) + " average: " +
    average.toFixed(2));
  total = 0;
  average = 0.0;
}

ES6 로 바꾸면 이렇게 표현할수 있다.

const grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
const result = grades.reduce((p, c, i)=>
`${p}Student ${i+1} average: ${(c.reduce((pg, cg) => pg + cg) / c.length).toFixed(2)}`, ``);

객체를 요소로 포함하는 배열

function Point(x,y) {
  this.x = x;
  this.y = y;
}
function displayPts(arr) {
  for (var i = 0; i < arr.length; ++i) {
    console.log(arr[i].x + ", " + arr[i].y);
  }
}
var p1 = new Point(1,2);
var p2 = new Point(3,5);
var p3 = new Point(2,8);
var p4 = new Point(4,4);
var points = [p1,p2,p3,p4];
for (var i = 0; i < points.length; ++i) {
  console.log("Point " + parseInt(i+1) + ": " + points[i].x + ", " +
    points[i].y);
}
var p5 = new Point(12,-3);
    points.push(p5);
    displayPts(points);
    points.shift();
    displayPts(points);

연습 문제

Modify the weeklyTemps object in the chapter so that it stores a month’s worth of data using a two-dimensional array. Create functions to display the monthly aver‐ age, a specific week’s average, and all the weeks’ averages.

기준이나 명세가 명확하지 않아 4주라는 조건을 가정하고 문제를 풀어봤다.

function weeklyTemps(){

    this.monthlyTemp =[[],[],[],[]];
    this.toArrayTemp = toArrayTemp;
    this.totalAvgMonthly = totalAvgMonthly;
    this.everyWeekly = everyWeekly;
    this.chooseWeekly = chooseWeekly;

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

          this.monthlyTemp[i][j] = ((Math.random()*30)+1).toFixed(1);

        }
    }

    //전체 배열 출력
    function toArrayTemp(){
        return this.monthlyTemp;
    }

    //지정한 주의 평균
    function chooseWeekly(week){

    var weekTemp =this.monthlyTemp[week].reduce(function(x,i){return Number(x)+Number(i) }) / 7;

    return "Select your "+week+"week  Temperature average : "+ weekTemp.toFixed(1);

    }


    //월간 토탈 평균
    function totalAvgMonthly(){
        var totalSum= 0;
        for(var h=0; h<this.monthlyTemp.length; h++ ){
            totalSum += this.monthlyTemp[h].reduce(function(x,i){return Number(x)+Number(i) }) /7 ;
        }
        return "Monthly total Average : "+(totalSum/4).toFixed(1);      
    }


    //모든주의 평균 출력
    function everyWeekly(){

        var averageWeek = [];
        var outPutString = "\n";
        for(var l=0; l<4; l++){
            averageWeek.push(
                { 
                week : l+1 ,
                tempAvg: this.monthlyTemp[l].reduce(function(x,i){return Number(x)+Number(i) }) / 7
                }
            );
        }
        for(var p=0; p<averageWeek.length; p++){
             outPutString += averageWeek[p].week+"week average : "+averageWeek[p].tempAvg.toFixed(1)+"! \n"
        }

        return outPutString;    
    }

}

var testTemp = new weeklyTemps();

testTemp.chooseWeekly(2);
testTemp.totalAvgMonthly();
testTemp.everyWeekly();

이어서 리스트에 대해 포스팅 하겠습니다.


  1. Data Structures and Algorithms with JavaScript(Michael McMillan)

'Javascript > DSA' 카테고리의 다른 글

Dictionary Data Structure  (0) 2016.08.09
HashTable Data Structure  (0) 2016.07.25
List Data Structure  (0) 2016.06.16
Array essential with ES6 -1-  (0) 2016.05.31
Data Structures & Algorithms with JavaScript  (0) 2016.05.30