> For the complete documentation index, see [llms.txt](https://leeboa.gitbook.io/study/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://leeboa.gitbook.io/study/javascript30/array-cardio.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
