# Array Cardio

### common

```javascript
//특정 조건을 만족하는 새 배열 만들기 
  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'
  ];
```

### filter() - 특정 조건을 만족하는 새 배열 만들기

```javascript
    
// Array.prototype.filter()
// 1. Filter the list of inventors for those who were born in the 1500's
// 1500 년대에 태어난 인물만 추려서 새로운 배열 만들기
const fifteen = inventors.filter(inventor => (inventor.year >= 1500 && inventor.year < 1600));

console.table(fifteen);
```

### map() - 함수 결과를 모아 새 배열 만들기

```javascript
 // 2. Give us an array of the inventor first and last names
 // 함수 결과를 모아 새 배열 만들기 (성 + 이름)
 const fullNames = inventors.map(inventor => `${inventor.first} ${inventor.last}`);
 console.log(fullNames);
```

### sort() - 오름차나 내림차로 배열 정리하기

```javascript
// 3. Sort the inventors by birthdate, oldest to youngest
// sort() 오름차순이나 내림차순으로 배열 정리하기 
const ordered2= inventors.sort((a, b) => a.year > b.year ? 1 : -1);
console.table(ordered2);
```

### reudce() - 배열의 요소 값을 누적하여 계산하기

```javascript
 // 4. How many years did all the inventors live?
 // reudce() - 배열의 요소 값을 누적하여 계산하기 (인물들이 산 햇수)
 const totalYears = inventors.reduce((total, inventor) => {
   return total + (inventor.passed - inventor.year);
 }, 0);
```

### sort()

```javascript
// 5. Sort the inventors by years lived
// sort() - 가장 오래 산 사람은? 
const oldest = inventors.sort(function(a, b) {
 const lastInventor = a.passed - a.year;
 const nextInventor = b.passed - b.year;
 return lastInventor > nextInventor ? -1 : 1;
});
console.table(oldest);
```

### includes()

```javascript
// 6. create a list of Boulevards in Paris that contain 'de' anywhere in the name
// includes() -이름에 'de'가 들어가는 사람만 모아서 새 배열로 만들기
const category = document.querySelector(".mw-category");
const categoryLinks = Array.from(category.querySelectorAll("a"));
const categoryLinksText = categoryLinks.map(link=>link.textContent);
const result = categoryLinksText.filter(text=>text.includes('de'));
// const result = de.filter(text=>text.indexOf("de") !== -1); //ES5
console.log(result);
```

### sort()

```javascript
// 7. sort Exercise
// Sort the people alphabetically by last name
// sort() - 이용하여 이름을 기준으로 알파벳순으로 나열
const alpha = people.sort((lastOne, nextOne) => {
  const [aLast, aFirst] = lastOne.split(', ');
  const [bLast, bFirst] = nextOne.split(', ');
  return aLast > bLast ? 1 : -1;
});
console.log(alpha);
```

### reduce()

```javascript
// 8. Reduce Exercise
// Sum up the instances of each of these
// reduce()를 활용해 인스턴스 개수세기 
const data = ['car', 'car', 'truck', 'truck', 'bike', 'walk', 'car', 'van', 'bike', 'walk', 'car', 'van', 'car', 'truck', 'pogostick'];

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

console.log(transportation);
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://leeboa.gitbook.io/study/javascript30/array-cardio.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
