Skip to content

JS array challenge #152

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Challenge/hmshp/everyArray/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
//every를 이용해서 모든 원소가 짝수인지 아닌지를 판별하세요
//## Expected Output: true

const numArray = [2, 12, 6, 8, 10];
function isEven(num) {
return num % 2 === 0;
}

let result = numArray.every(isEven);
console.log(result);

//함수 쓰지 않고 해 보자 🔽
let result2 = numArray.every((num) => num % 2 === 0);
console.log(result2);
22 changes: 22 additions & 0 deletions Challenge/hmshp/filterAge/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// write your codes
let bio = [
{ name: "Hennie", age: 27 },
{ name: "Mark", age: 22 },
{ name: "Katniss", age: 46 },
{ name: "Harry", age: 35 },
];
//객체

function solution(inputArray) {
return inputArray.age >= 30 && inputArray.age < 50;
}
//filter에서 쓸 함수(나이가 30 이상 50 미만)

let filtered = bio.filter(solution);
console.log(filtered);
//출력 결과: [ { name: 'Katniss', age: 46 }, { name: 'Harry', age: 35 } ]

//함수 안 쓰고 바로 filter 하는 방법 🔽
let result = bio.filter((obj) => obj.age >= 30 && obj.age < 50);
console.log(result);
//출력 결과: [ { name: 'Katniss', age: 46 }, { name: 'Harry', age: 35 } ]
17 changes: 17 additions & 0 deletions Challenge/hmshp/filterOdd/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// write your codes
const numArray = [1, 2, 3, 4, 5];
//배열 선언 및 초기화

function solution(inputArray) {
return inputArray % 2 === 1;
}
//filter에 사용할 함수 만들기(홀수일 때만 반환)

let filtered = numArray.filter(solution);
console.log(filtered);
//출력 결과: [ 1, 3, 5 ]

//함수 안 쓰고 바로 filter 하는 방법 🔽
let result = numArray.filter((el) => el % 2 === 1);
console.log(result);
//출력 결과: [ 1, 3, 5 ]
21 changes: 21 additions & 0 deletions Challenge/hmshp/findWord/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// write your codes
//용가리라는 단어가 있으면 true 없으면 false를 출력
//## Expected Output: true

const words = ["용가리", "용용이", "말랑이"];

// const result = words.find(function (word) {
// return word === "용가리";
// });
// -> 이렇게 일일이 function 쓸 필요 없고 arrow function 쓰면 된다. 🔽

const result = words.find((word) => word === "용가리");
console.log(result);
//출력값: 용가리
//true가 나오게 하려면?? 🔽

const boolResult = words.includes("용가리");
console.log(boolResult);

//find: 콜백 함수를 사용해야 하고, 콜백 함수는 boolean 타입을 리턴해야 된다.
//콜백함수란? '야, 나중에 호출할게!'라는 의미로 callback함수다.
12 changes: 12 additions & 0 deletions Challenge/hmshp/forEachFilter/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// write your codes
const numArray = [10, 20, 30, 40, 50, 60, 70];
//배열 정의하고 초기화하기

function solution(inputArray) {
return inputArray >= 40;
}
//filter에서 사용할 함수(40 이상인 수만 반환)

let filtered = numArray.filter(solution);
console.log(filtered);
//출력 결과: [40, 50, 60, 70]
10 changes: 10 additions & 0 deletions Challenge/hmshp/forEachFilterIsNaN/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// write your codes
const myArray = [1, "apple", 34, true];
function typeOfNaN(inputArray) {
return isNaN(inputArray) === false;
}

let filtered = myArray.filter(typeOfNaN);
console.log(filtered);
//출력 결과: [ 1, 34, true ]
//이해가 안 되는 부분: true는 Number이 아닌데 왜 출력될까?
19 changes: 19 additions & 0 deletions Challenge/hmshp/forEachMap/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// write your codes
const numArray = [10, 20, 30, 40, 50];

let filtered = [];
numArray.forEach((num) => filtered.push(`${num}%`));
console.log(filtered);
/*처음에는 이렇게 🔽 했는데

let filtered = numArray.forEach((el) => el + "%");
console.log(filtered);

undefined가 나와서 (왜일까?)
다른 분들 코드를 참고했다.
*/

// Map을 사용해 보자 🔽
let result = numArray.map((num) => `${num}%`);
console.log(result);
//콜백 함수로 전달되는 인자 이름은 최대한 의미를 이해하기 쉽게
17 changes: 17 additions & 0 deletions Challenge/hmshp/forEachReduce/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
//forEach 메소드를 사용해서 배열의 총 합을 출력하는 코드를 작성하세요
// write your codes
const numArray = [1, 2, 3, 4];

// let sum = 0;
// numArray.forEach((el) => (sum += el));

// console.log(sum);

//reduce를 사용해 보자 🔽
let result = numArray.reduce((prev, curr) => prev + curr, 0);
//콜백 함수는 return을 해 줘야 한다.(return 키워드 생략 가능)
//우리가 return하는 값이 다음 차례에는 prev로 순차적으로 들어간다.
//curr에는 배열의 값이 순차적으로 전달된다.
//0 -> prev 값 0부터 시작한다는 의미.

console.log(result);
14 changes: 14 additions & 0 deletions Challenge/hmshp/reduceMaxValueNIndex/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// write your codes
const numArray = [15, 2, 20, 5];
let maxValue = numArray.reduce((prev, curr) => {
if (curr > prev) {
return curr;
} else {
return prev;
}
}, 0);

let idx = numArray.findIndex((num) => num === maxValue);

console.log(`최대값: ${maxValue}`);
console.log(`최대값의 인덱스: ${idx}`);
9 changes: 9 additions & 0 deletions Challenge/hmshp/reduceNameNickname/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
//입력받은 객체배열의 nickname을 key, name을 value로 하는 객체를 출력하세요
// write your codes
const bio = [
{ name: "Mark", nickname: "Mel" },
{ name: "Heymee", nickname: "Hennie" },
{ name: "Katniss", nickname: "Catnip" },
];

//모르겠음
10 changes: 10 additions & 0 deletions Challenge/hmshp/sortByPrice/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// write your codes
const fruits = [
{ name: "당근", price: 2000 },
{ name: "사과", price: 1000 },
{ name: "참외", price: 10000 },
{ name: "수박", price: 5000 },
];

const result = fruits.sort((a, b) => a.price - b.price);
console.log(result);
34 changes: 34 additions & 0 deletions Challenge/hmshp/sortByPrice/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const { solution } = require('./solve');

const test1 = {
input: [
{
name: '사과',
price: 1000,
},
{
name: '수박',
price: 5000,
},
{
name: '당근',
price: 2000,
},
{
name: '참외',
price: 10000,
},
],
answer: [
{ name: '사과', price: 1000 },
{ name: '당근', price: 2000 },
{ name: '수박', price: 5000 },
{ name: '참외', price: 10000 },
],
};

describe('sortByPrice', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
});
15 changes: 15 additions & 0 deletions Challenge/hmshp/sortByPriceAndQuantity/solve.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// write your codes
const fruits = [
{ name: "오이", price: 2000, quantity: 49 },
{ name: "사과", price: 1000, quantity: 2 },
{ name: "참외", price: 5000, quantity: 10 },
{ name: "당근", price: 2000, quantity: 50 },
{ name: "수박", price: 5000, quantity: 20 },
];

//다른 분 코드 참고했다.
const result = fruits.sort(
(a, b) => a.price - b.price || a.quantity - b.quantity
);
console.log(result);

44 changes: 44 additions & 0 deletions Challenge/hmshp/sortByPriceAndQuantity/solve.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const { solution } = require('./solve');

const test1 = {
input: [
{
name: '사과',
price: 1000,
quantity: 2,
},
{
name: '수박',
price: 5000,
quantity: 20,
},
{
name: '당근',
price: 2000,
quantity: 50,
},
{
name: '참외',
price: 5000,
quantity: 10,
},
{
name: '오이',
price: 2000,
quantity: 49,
},
],
answer: [
{ name: '사과', price: 1000, quantity: 2 },
{ name: '오이', price: 2000, quantity: 49 },
{ name: '당근', price: 2000, quantity: 50 },
{ name: '참외', price: 5000, quantity: 10 },
{ name: '수박', price: 5000, quantity: 20 },
],
};

describe('sortByPriceAndQuantity', () => {
test('test1', () => {
expect(solution(test1.input)).toEqual(test1.answer);
});
});