회사 업무중에 객체로 이루어진 두 개의 배열에서 email이 다른 객체만 추출하여 새로운 배열로 만들어야하는 로직이 필요했습니다.
const arr1 = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bob@example.com' },
{ name: 'Charlie', email: 'charlie@example.com' }
];
const arr2 = [
{ name: 'Alice', email: 'alice@example.com' },
{ name: 'Bob', email: 'bobby@example.com' },
{ name: 'Charlie', email: 'charlie@example.com' }
];
const result = arr1.filter(obj1 => arr2.some(obj2 => obj1.name === obj2.name && obj1.email !== obj2.email));
위와 같이 `obj1.name === obj2.name && obj1.email !== obj2.email`을 하면 result에 [{ name: 'Bob', email: 'bob@example.com' }] 이 추가되고 `obj1.email !== obj2.email`을 하면 result가 아래와 같습니다.
[
{
"name": "Alice",
"email": "alice@example.com"
},
{
"name": "Bob",
"email": "bob@example.com"
},
{
"name": "Charlie",
"email": "charlie@example.com"
}
]
대체 some과 every는 무엇일까요.
둘 다 배열 내의 모든 요소를 반복하면서 주어진 함수를 적용하여 불리언 값을 반환합니다.
먼저, some을 보겠습니다.
Some()
- 배열의 요소 중 하나 이상이 주어진 조건을 만족하는지 여부를 확인합니다.
- 배열 내의 요소 중 적어도 하나가 주어진 함수를 통과하면 `true`를 반환하고 그렇지 않으면 `false`를 반환합니다.
- 배열의 일부 요소만 검사하며, 조건을 만족하는 요소가 발견되면 검사를 중지합니다.
const arr [ 2, 4, 6, 8, 10];
const hasEvenNumber = arr.some(num => num % 2 === 0);
console.log(hasEventNumber); // true
const hasOddNumber = arr.som(num => num % 2 === 1);
console.log(hasOddNumber); // false
const quiz = {
question: "자바스크립트는 동기적으로 실행됩니다.",
answer: true
}
function checkAnswer(answer, quiz) {
if (answer === quiz.answer) {
console.log("정답입니다.");
} else {
console.log("오답입니다. 정답은 " + quiz.answer + " 입니다. ");
}
}
const userAnser = prompt(quiz.question);
checkAnswer(Boolean(userAnser), quiz);
function checkAnswer(answer, quiz) {
if (quiz.choices.some(coice => choice === answer)) {
console.log("정답입니다.");
} else {
console.log("오답입니다. 정답은 " + quiz.answer + " 입니다.");
}
}
every()
- 배열의 모든 요소가 주어진 조건을 만족하는지 여부를 확인합니다.
- 배열의 모든 요소가 조건을 만족하면 `true`를 반환하고, 그렇지 않으면 `false`를 반환합니다.
- `every` 메소드도 배열의 일부 요소만 검사하며, 조건을 만족하지 않는 요소가 발견되면 검사를 중지합니다.
const arr = [1, 2, 3, 4, 5];
const result = arr.every(num => num < 3);
console.log(result); // false
정리하자면, some과 every는 배열의 함수인데 배열을 순회하면서 조건을 만족하는 값이 하나라도 있으면 some은 순회를 멈추고 true를 반환. every는 모든 값이 조건을 만족해야 true인데 만족하지 않는 값이 하나라도 있으면 순회를 멈추고 false를 반환.
'JS소스모듈' 카테고리의 다른 글
[JS] 새로운 배열을 반환하는 Array 메소드 (0) | 2023.03.11 |
---|---|
토큰 만료 갱신 (0) | 2022.11.21 |
[과제 테스트]fetch함수 사용 (0) | 2022.11.10 |
허허허헣 (0) | 2022.11.09 |
localstorage에 리소스 저장 및 조회 (0) | 2022.11.09 |