[JavaScript30] ๐Ÿ“„ 04. Array Cardio Day1

์กฐ์ค€ํ˜•ยท2021๋…„ 7์›” 5์ผ
1

JavaScript30

๋ชฉ๋ก ๋ณด๊ธฐ
4/30

๐Ÿ“„ 04. Array Cardio Day1

๋ฐฐ์—ด๊ณผ ๋ฐฐ์—ด์ œ์–ด์— ๋Œ€ํ•ด ๊ณต๋ถ€.

์ดˆ๊ธฐ์ฝ”๋“œ

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Array Cardio ๐Ÿ’ช</title>
</head>
<body>
  <p><em>Psst: have a look at the JavaScript Console</em> ๐Ÿ’</p>
  <script>
    // Get your shorts on - this is an array workout!
    // ## Array Cardio Day 1

    // Some data we can work with

    const inventors = [
      { first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
      { first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
      { first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
      { first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
      { first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
      { first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
      { first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
      { first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
      { first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
      { first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
      { first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
      { first: 'Hanna', last: 'Hammarstrรถm', year: 1829, passed: 1909 }
    ];

    const people = [
      'Bernhard, Sandra', 'Bethea, Erin', 'Becker, Carl', 'Bentsen, Lloyd', 'Beckett, Samuel', 'Blake, William', 'Berger, Ric', 'Beddoes, Mick', 'Beethoven, Ludwig',
      'Belloc, Hilaire', 'Begin, Menachem', 'Bellow, Saul', 'Benchley, Robert', 'Blair, Robert', 'Benenson, Peter', 'Benjamin, Walter', 'Berlin, Irving',
      'Benn, Tony', 'Benson, Leana', 'Bent, Silas', 'Berle, Milton', 'Berry, Halle', 'Biko, Steve', 'Beck, Glenn', 'Bergman, Ingmar', 'Black, Elk', 'Berio, Luciano',
      'Berne, Eric', 'Berra, Yogi', 'Berry, Wendell', 'Bevan, Aneurin', 'Ben-Gurion, David', 'Bevel, Ken', 'Biden, Joseph', 'Bennington, Chester', 'Bierce, Ambrose',
      'Billings, Josh', 'Birrell, Augustine', 'Blair, Tony', 'Beecher, Henry', 'Biondo, Frank'
    ];
    
    // Array.prototype.filter()
    // 1. Filter the list of inventors for those who were born in the 1500's
    // 1. 1500 ๋…„๋Œ€์— ํƒœ์–ด๋‚œ ๋ฐœ๋ช…๊ฐ€ ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

    // Array.prototype.map()
    // 2. Give us an array of the inventors first and last names
	// 2.๋ฐœ๋ช…๊ฐ€์˜ ์ด๋ฆ„๊ณผ ์„ฑ์˜ ๋ฐฐ์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      
    // Array.prototype.sort()
    // 3. Sort the inventors by birthdate, oldest to youngest
	// 3. ๋ฐœ๋ช…๊ฐ€๋ฅผ ์ƒ๋…„์›”์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
      
    // Array.prototype.reduce()
    // 4. How many years did all the inventors live all together?
	// 4. ๋ชจ๋“  ๋ฐœ๋ช…๊ฐ€๊ฐ€ ํ•จ๊ป˜ ์‚ด์•˜๋˜ ์ง€ ์–ผ๋งˆ๋‚˜ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?
      
    // 5. Sort the inventors by years lived
	// 5. ๋ฐœ๋ช…๊ฐ€๋ฅผ ์‚ด์•˜๋˜ ์—ฐ๋„๋ณ„๋กœ ์ •๋ ฌ
      
    // 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
    // https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
	// 6. ์ด๋ฆ„์— 'de'๊ฐ€ ํฌํ•จ ๋œ ํŒŒ๋ฆฌ์˜ Boulevards์˜ ๋ชฉ๋ก์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    // 7. sort Exercise
    // Sort the people alphabetically by last name
	// 7. ์‚ฌ๋žŒ๋“ค์„ ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ
      
    // 8. Reduce Exercise
    // Sum up the instances of each of these
	// 8. ์ด๋“ค ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์š”์•ฝ
    const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];

  </script>
</body>
</html>

๐ŸŒ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ๊ฒƒ ๋ฐ ์ •๋ฆฌ

๐Ÿ‘‰ filter()

๋Œ€์ž…๋œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋ฐฐ์—ด ๋‚ด๋ถ€๋ฅผ ์ˆœํ™˜ํ•˜๋ฉด์„œ, ์š”์†Œ๋งˆ๋‹ค ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ง€ํ™•์ธํ•จ.

const fifteen = inventors.filter(function(inventor){
    if(inventor.year >= 1500 && inventor.year <= 1599){
    	return true; // keep it!
    }else{
    	return false;
   }
});

1๋ฒˆ๋ฌธ์ œ์ธ๋ฐ, ์ด๊ฒฝ์šฐ inventors๋ฐฐ์—ด ๋‚ด๋ถ€๋ฅผ ๋Œ๋ฉด์„œ inventor์˜ year์ด 1500 ~ 1600์ธ ์•„์ด๋“ค์„ ์ฐพ์•„ ๋ฆฌํ„ดํ•จ.

๐Ÿ‘‰ map()

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ผ๊ด„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

callbackํ•จ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„, callbackํ•จ์ˆ˜์˜ return์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’๋“ค์„ ์žฌ์กฐํ•ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์— ๋งŒ๋“ฌ.

const fullNames = inventors.map(inventor => inventor.first + " " + inventor.last);

inventors๋ฐฐ์—ด์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด fullNames์— ์ €์žฅ.

๐Ÿ‘‰ sort()

๋ฉ”์„œ๋“œ ์ธ์ž๋กœ ๋น„๊ตํ•จ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•˜์—ฌ ๋ฐฐ์—ด ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

sort๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜์ง€์•Š๊ณ  ์›๋ณธ ๋ฐฐ์—ด ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋‹ˆ๊นŒ ์ฃผ์˜!

๋ฐฐ์—ด.sort(function(a,b)){
	return ๋น„๊ต๊ฐ’;
}

๋น„๊ต๊ฐ’์— ๋”ฐ๋ผ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.

  • ๋น„๊ต๊ฐ’ > 0 : a๊ฐ€ b๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

    ๋ฐฐ์—ด์˜ ์ž‘์€ ์ธ๋ฑ์Šค๋ผ๋Š” ๋œป์€ ๋ฐฐ์—ด์—์„œ ์•ž๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ.

    ์ฆ‰, a๊ฐ€ b๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•จ.

  • ๋น„๊ต๊ฐ’ < 0 : b๊ฐ€ a๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. b๊ฐ€ a๋ณด๋‹ค ์•ž์— ์œ„์น˜.

  • ๋น„๊ต๊ฐ’ = 0 : a์™€ b์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ.

a-b๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ, b-a๊ฐ€ ๋‚ด๋ฆผ์ฐจ์ˆœ

๐Ÿ‘‰ reduce()

๋ฐฐ์—ด์š”์†Œ๋ฅผ ์ˆœํ™˜ํ•˜๋ฉด์„œ ์ •์˜๋œ callbackํ•จ์ˆ˜์— ์˜ํ•ด ๋‹จ์ผ ๊ฐ’์œผ๋กœ ๋ˆ„์  ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐ์—ด.reduce(๋ˆ„์ ๋œ ๊ฐ’, ํ˜„์žฌ ์š”์†Œ ๊ฐ’, ํ˜„์žฌ ์ธ๋ฑ์Šค, ์›๋ณธ ๋ฐฐ์—ด) => {
return ๋ˆ„์ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฐ’
}, ์ดˆ๊ธฐ๊ฐ’);
const totalYears = inventors.reduce((total, inventor)=>{
        return total + (inventor.passed - inventor.year);
    }, 0);

๐ŸŒ ํ’€์ด

๐Ÿ‘‰ 1. 1500๋…„๋Œ€์— ํƒœ์–ด๋‚œ ๋ฐœ๋ช…๊ฐ€ ๋ชฉ๋ก์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

const fifteen = inventors.filter(function(inventor){
    if(inventor.year >= 1500 && inventor.year <= 1599){
    	return true; // keep it!
    }else{
    	return false;
   }
});

filter()๋ฅผ ์ด์šฉ ํ•˜์—ฌ 1500~1599 ์‚ฌ์ด์˜ ๋ฐœ๋ช…๊ฐ€๋“ค์„ ํ•„ํ„ฐ๋งํ•จ.

Arrow Function

const fifteen = inventors.filter((inventor=> inventor.year >= 1500 && inventor.year <1600));

ํ™”์‚ดํ‘œํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํ•œ์ค„๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ

๐Ÿ‘‰ 2.๋ฐœ๋ช…๊ฐ€์˜ ์ด๋ฆ„๊ณผ ์„ฑ์˜ ๋ฐฐ์—ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

const fullNames = inventors.map(inventor => inventor.first + " " + inventor.last);

map์„ ์ด์šฉํ•˜์—ฌ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

ํ‘œ์‹œํ•  ๋•Œ ๋ฐฑํ‹ฑ(`)์„ ์ด์šฉํ•ด ์ค‘๊ฐ„์— " " ๋ถ€๋ถ„์—†์ด ํ•œ๋ฒˆ์— ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

const fullNames = inventors.map(inventor => `${inventor.first} ${inventor.last}`);

๐Ÿ‘‰ 3. ๋ฐœ๋ช…๊ฐ€๋ฅผ ์ƒ๋…„์›”์ผ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

const ordered = inventors.sort(function(a, b){
  if(a.year > a.year){
    return 1;
  }else{
    return -1;
  }
})

sort๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Arrow Function

const ordered = inventors.sort((a,b)=>a.year>b.year ? 1 : -1);

๊ฒฐ๊ณผ

๐Ÿ‘‰ 4. ๋ชจ๋“  ๋ฐœ๋ช…๊ฐ€๊ฐ€ ํ•จ๊ป˜ ์‚ด์•˜๋˜ ์ง€ ์–ผ๋งˆ๋‚˜ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

var totalYears = 0;
for(var i=0;i<inventors.length; i++){
  totalYears += inventors[i].year
}

๋ฐ˜๋ณต๋ฌธ ๋Œ๋ ค์„œ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, reduce๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

reduce

const totalYears = inventors.reduce((total, inventor)=>{
  return total + (inventor.passed - inventor.year);
}, 0);

๐Ÿ‘‰ 5. ๋ฐœ๋ช…๊ฐ€๋ฅผ ์‚ด์•˜๋˜ ์—ฐ๋„๋ณ„๋กœ ์ •๋ ฌ

const oldest = inventors.sort(function(a,b){
  const lastGuy = a.passed - a.year;
  const nextGuy = b.passed - b.year;
  // if(lastGuy > nextGuy){
  //     return -1;
  // }else{
  //     return 1;
  // }
  return lastGuy > nextGuy ? -1 : 1;    })

sort๋ฅผ ์ด์šฉํ•ด ์ •๋ ฌํ•˜๋Š”๋ฐ,

์ฃผ์„ ์ฒ˜๋ฆฌ๋œ ๋ถ€๋ถ„์„ 3ํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ return ๋ถ€๋ถ„์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘‰ 6. ์ด๋ฆ„์— 'de'๊ฐ€ ํฌํ•จ ๋œ ํŒŒ๋ฆฌ์˜ Boulevards์˜ ๋ชฉ๋ก์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

const category = document.querySelector('.mw-category');
const links = Array.from(category.querySelectorAll('a'));
const de = links
.map(link =>link.textContent)
.filter(streetName => streetName.includes('de'));

๐Ÿ‘‰ 7. ์‚ฌ๋žŒ๋“ค์„ ์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ

const alpha = people.sort(function(lastOne, nextOne){
  const [aLast, aFirst] = lastOne.split(', ');
  const [bLast, bFirst] = nextOne.split(', ');
  return aLast > bLast ? 1 : -1;    });

lastOne๊ณผ nextOne์—์„œ split์„ ์ด์šฉํ•˜์—ฌ ,๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

[last, Frist]

๊ทธ ํ›„ ์ •๋ ฌํ•จ.

๐Ÿ‘‰ 8. ์ด๋“ค ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์š”์•ฝ

const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck' ];
const transportation = data.reduce(function(obj, item){
  // console.log(item);
  if(!obj[item]){
    obj[item] = 0;
  }
  obj[item]++;
  return obj;
},{});

obj[item]์ด ๋นˆ๊ฐ’์ด๋ฉด 0, ์•„๋‹ˆ๋ฉด item์˜ ๊ฐ’์„ 1์ฆ๊ฐ€.

item์ด ํ‚ค๊ฐ’์ด๋œ๋‹ค.

{car: 5, truck: 3, bike: 2, walk: 2, van: 2}bike: 2car: 5truck: 3van: 2walk: 2
profile
๊นƒํ—ˆ๋ธŒ : github.com/JuneHyung

0๊ฐœ์˜ ๋Œ“๊ธ€