language/javascript

[JavaScript30] 4. Array Cardio Practice (1)

๊ฑด๋ง๋”” 2021. 12. 9. 21:13

๐Ÿ“ƒ ์š”๊ตฌ์‚ฌํ•ญ

์ฃผ์–ด์ง„ data๋“ค์„ ๊ฐ€์ง€๊ณ , ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฐ๊ด๊ฐ’์„ console ์ฐฝ์— ๋„์šด๋‹ค.

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ

๋จผ์ €, ์ฃผ์–ด์ง„ data๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// 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
const result1 = inventors.filter(
  (inventor) => inventor.year >= 1500 && inventor.year < 1600
);
console.log(result1);

// Array.prototype.map()
// 2. Give us an array of the inventors first and last names
const result2 = inventors.map((inventor) => ({
  first: inventor.first,
  last: inventor.last,
}));
console.log(result2);

// Array.prototype.sort()
// 3. Sort the inventors by birthdate, oldest to youngest
const result3 = inventors.sort((a, b) => {
  return a["year"] - b["year"] ? 1 : -1;
});
console.log(result3);

// Array.prototype.reduce()
// 4. How many years did all the inventors live all together?
const result4 = inventors.reduce(
  (acc, cur) => acc + (cur.passed - cur.year),
  0
);
console.log(result4);

// 5. Sort the inventors by years lived
const result5 = inventors.sort((a, b) => {
  return a.passed - a.year > b.passed - b.year ? 1 : -1;
});
console.log(result5);

// 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
// https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris

// 7. sort Exercise
// Sort the people alphabetically by last name
const result7 = people.sort((a, b) =>
  a.split(",")[1] > b.split(",")[1] ? 1 : -1
);
console.log(result7);

// 8. Reduce Exercise
// Sum up the instances of each of these
const data = [
  "car",
  "car",
  "truck",
  "truck",
  "bike",
  "walk",
  "car",
  "van",
  "bike",
  "walk",
  "car",
  "van",
  "car",
  "truck",
];
const result8 = {};

data.forEach((x) => {
  result8[x] = (result8[x] || 0) + 1;
});

console.log(result8);

6๋ฒˆ์€ ์–ด๋–ป๊ฒŒ ํ‘ธ๋Š” ๊ฒƒ์ธ์ง€ ๋ชฐ๋ผ์„œ ํŒจ์Šคํ–ˆ๋‹ค..๐Ÿค”

 

๐Ÿค— ๊ฐœ์„ ๋œ ๊ฐ•์˜ ์ฝ”๋“œ

// Array.prototype.filter()
// 1. Filter the list of inventors for those who were born in the 1500's
const fifteen = inventors.filter(
  (inventor) => inventor.year >= 1500 && inventor.year < 1600
);
console.table(fifteen);

// Array.prototype.map()
// 2. Give us an array of the inventors first and last names
const fullNames = inventors.map(
  (inventor) => `${inventor.first} ${inventor.last}`
);
console.log(fullNames);

// Array.prototype.sort()
// 3. Sort the inventors by birthdate, oldest to youngest
// const ordered = inventors.sort(function (a, b) {
//   if (a.year > b.year) {
//     return 1;
//   } else {
//     return -1;
//   }
// });
const ordered = inventors.sort((a, b) => (a.year > b.year ? 1 : -1));
console.table(ordered);

// Array.prototype.reduce()
// 4. How many years did all the inventors live all together?
const totalYears = inventors.reduce((total, inventor) => {
  return total + (inventor.passed - inventor.year);
}, 0);
console.log(totalYears);

// 5. Sort the inventors by years lived
const oldest = inventors.sort(function (a, b) {
  const lastGuy = a.passed - a.year;
  const nextGuy = b.passed - b.year;

  return lastGuy > nextGuy ? -1 : 1;
});
console.table(oldest);

// 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
// https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
const category = document.querySelector(".mw-category");
const links = Array.from(category.querySelectorAll("a"));
// const links = [...category.querySelectorAll("a")];
const de = links
  .map((link) => link.textContent)
  .filter((streetName) => streetName.includes("de"));

// 7. sort Exercise
// Sort the people alphabetically by last name
const alpha = people.sort((lastOne, nextOne) => {
  const [aLast, aFirst] = lastOne.split(", ");
  const [bLast, bFirst] = nextOne.split(", ");
  return aLast > bLast ? 1 : -1;
});
console.log(alpha);

// 8. Reduce Exercise
// Sum up the instances of each of these
const data = [
  "car",
  "car",
  "truck",
  "truck",
  "bike",
  "walk",
  "car",
  "van",
  "bike",
  "walk",
  "car",
  "van",
  "car",
  "truck",
];

const transportation = data.reduce(function (obj, item) {
  if (!obj[item]) {
    obj[item] = 0;
  }
  obj[item]++;
  return obj;
}, {});
console.log(transportation);

 

๐Ÿ“– TIL

console.table()

console.table() ๋ฉ”์„œ๋“œ๋Š” data๋ฅผ ํ‘œ ํ˜•์‹์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ์ด๊ฒƒ์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ๊ฒฐ๊ด๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

console.table()์„ ์ด์šฉํ•ด์„œ ์ถœ๋ ฅํ•œ 1๋ฒˆ ๋ฌธ์ œ์˜ ๊ฒฐ๊ณผ๊ฐ’

map()

map() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ๋‚ด์˜ ๋ชจ๋“  ์š”์†Œ ๊ฐ๊ฐ์— ๋Œ€ํ•˜์—ฌ ์ฃผ์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ๋ฐฐ์—ด ์•ˆ์˜ ์š”์†Œ๋“ค์„ 1๋Œ€ 1๋กœ ์ง์ง€์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ป๊ฒŒ ์ง์ง€์–ด์ค„ ๊ฒƒ์ธ์ง€ ์ •์˜ํ•œ ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๋ฐฐ์—ด.map((์š”์†Œ, ์ธ๋ฑ์Šค, ๋ฐฐ์—ด) => { return ์š”์†Œ });
const arr = [1, 4, 9, 16];

const map = arr.map(x => x * 2);

console.log(map); // [2, 8, 18, 32]

 

reduce()

reduce() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ๋ฆฌ๋“€์„œ(reducer) ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ํ•˜๋‚˜์˜ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฐฐ์—ด.reduce((๋ˆ„์ ๊ฐ’, ํ˜„์žฌ๊ฐ’, ์ธ๋ฑ์Šค, ์š”์†Œ) => { return ๊ฒฐ๊ณผ }, ์ดˆ๊ธฐ๊ฐ’);
const arr = [1, 2, 3, 4];
const reducer = (prev, curr) => prev + curr;

console.log(arr.reduce(reducer)); // 10
console.log(arr.reduce(reducer, 5)); // 15

 

sort()

sort() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์ •๋ ฌํ•œ ํ›„ ๊ทธ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿฎ inventors ๋ฐฐ์—ด์„ passed ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ

const sortByPassed = inventors.sort((a, b) => {
  return a.passed > b.passed ? 1 : -1;
});
console.table(sortByPassed);

๐Ÿฎ inventors ๋ฐฐ์—ด์„ passed ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

const sortByPassed = inventors.sort((a, b) => {
  return a.passed > b.passed ? -1 : 1;
});
console.table(sortByPassed);

sort()์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž(์กฐ๊ฑด์‹ ? ๋ฐ˜ํ™˜๊ฐ’1 : ๋ฐ˜ํ™˜๊ฐ’2)๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์˜ ๋‚ด์žฅ ํ•จ์ˆ˜๋Š” ๋ณผ์ˆ˜๋ก ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™๋‹ค.. ์ž์ฃผ ์จ๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋Š” ์ˆ˜๋ฐ–์— ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค๐Ÿ˜•

 

 

 

๐Ÿ‘€ ์ฐธ๊ณ 

youtube Wes Bos

https://www.youtube.com/watch?v=HB1ZC7czKRs&list=PLu8EoSxDXHP6CGK4YVJhL_VWetA865GOH&index=4 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

 

https://www.zerocho.com/category/JavaScript/post/5acafb05f24445001b8d796d