김보안의 블로깅
  • 🏠 Home
  • 📚 Project
    • Blockchain
      • 🎦 PickMe
      • 🎦 IoTC
      • 🎦 Blackchain
      • 📃 Gemology
      • 🎦 PickMe
      • 🎦 PickMe
    • AI
      • 👋 A.I. Dream Reader
      • 🎦 A.I. Dream Reader
    • Security
      • 🎦 SNAC
    • Education
      • 🎦 Smart Lecture
  • 🤸‍♂ Hobby
    • Music
      • Violin
      • Guitar
      • Piano
      • Drum
    • Flower
      • Flower Certificate
    • Sport
      • Ski
      • Skateboard
      • Golf
      • Boxing

2018년 8월 26일 일요일

Javascript 배열의 모든것 2 ( filter, some, every, reduce )

 SecureKim     오후 2:08     배열, 자바스크립트, Array, every, filter, json, Node.js Javascript, reduce, some     No comments   


map 은 배열의 모든것 1탄 에서 다루었으니, 다른 것들도 다뤄보도록 한다.

ㆍfilter

말 그대로 배열에서 어떤 값을 필터링 하고 싶을 때 사용한다.

filter 내부 에서 리턴되는 값이 true 이면 해당 원소를 포함하고,
false 이면 포함하지 않는다.

const data = [1, 2, 3, 4, 5]
// 들어온 val 가 짝수인 경우에 true.
// true 이면 새로운 배열에 포함하고, false 이면 제외한다.
// 짝수를 얻어와 보자.
const evenNumber = data.filter(val => (val % 2 == 0 ) );


ㆍEvery, Some 

배열 값들 모두(Every) 그러한가, 몇개(Some)만 그러한가.

당연히 도중에 답을 찾으면 순회를 그만둔다.

const data = [1, 2, 3, 4, 5];
const isAllEven = data.every(val => { return val % 2 == 0 });
console.log(isAllEven); // false
const isSomeEven = data.some(val => { return val % 2 == 0 });
console.log(isSomeEven); // true

ㆍReduce

사실 map 과 filter 를 이용하면 거의 모든 작업을 다 할 수 있을 것 같은 생각이 든다.

하지만 다음과 같이 배열에서 특정 단어의 개수를 세서
새로운 Object 를 만들고 싶을 때 등 복잡한 작업에는 reduce 가 딱이다.

movie = ["spy","oabe","oabe","ray","spy","room","room","once","ray","spy","once"];
var result = movie.reduce( (obj, value, index, array)=> {
    if(obj.hasOwnProperty(value)) {
        obj[value] += 1;
    } else {
        obj[value] = 1;
    }
    return obj;
}, {});
{ spy : 3,
oabe : 2,
ray : 2,
room : 2,
once : 2 }


만약에 관리를 jsonArray 로 하고싶다면, 다음과 같은 방법을 사용해도 된다.

var movie = ["spy","oabe","oabe","ray","spy","room","room","once","ray","spy","once"];
var idxHash = {};
var result = movie.reduce( (arr, value, index, array)=> {
if(idxHash.hasOwnProperty(value)) {
arr[idxHash[value]].count += 1;
} else {
idxHash[value] = arr.length;
arr.push({title:value, count:1});
}
return arr;
}, []);

[ {title: spy , count: 3}
,{title: oabe, count: 2}
,{title: ray , count: 2}
,{title: room, count: 2}
,{title: once, count: 2}]

눈치 챘겠지만 최초 초기화 타입은 json, array 등 다양하게 줄 수 있고,

초기화 값도 줄 수 있다.

결국 배열을 순회하면서 여기에 값을 채워나가는 형태다.



  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
이메일로 전송BlogThis!Twitter에서 공유Facebook에서 공유
최근 게시물 이전 게시물 홈

0 개의 댓글:

댓글 쓰기

페이지

  • 홈
  • Hobby

Categories

  • AI
  • android
  • AWS
  • Blockchain
  • Hardware
  • Javascript
  • mysql
  • Node.js
  • Plasma
  • review
  • Security
  • Study
  • Video
  • windows

Popular Posts

  • 회사 프록시와 인증서에 고통받는 그대를 위한 글 (Bash, Gradle, Python, wget, nodejs(npm), apt-get, cURL, git, yarn, androidStudio)
    대기업에 입사하면 장단점이 있는데, 단점 중에 하나가 회사에서 프록시를 사용하여 트래픽 감시를 하므로 프록시 설정을 해주어야 한다는 점 입니다. 특히, 회사에서는 https 트래픽도 감시를 하므로 인증서도 설정해 주어야 합니다. 그런데 문...
  • Termux 로 안드로이드에 우분투(GUI)와 VSCode설치하기
      많은 글들이 있지만 뭔가 대부분 잘 안됐다. 이번 기회에 정리한다. 0. 먼저 Termux와 Remote Desktop Manager를 설치한다. Remote Desktop Manager 대신 아래도 나쁘지 않다. 화면이 작지만 마우스 스크롤이나 ...
  • Node.js 에서 RSA 로 암복호화 하기
    Node.js 의 crypto 모듈은 기본적으로 제공되므로, npm 으로 설치할 필요가 없습니다. crypto 기본 모듈을 사용해 RSA 의 키로 암복호화 하는 방법을 알아 봅시다. 일단 그 전에 OpenSSL로 RSA Private Key...

Blog Archive

  • ►  2023 (1)
    • ►  1월 (1)
  • ►  2022 (10)
    • ►  12월 (1)
    • ►  11월 (3)
    • ►  9월 (1)
    • ►  8월 (1)
    • ►  6월 (2)
    • ►  3월 (2)
  • ►  2021 (9)
    • ►  12월 (3)
    • ►  11월 (1)
    • ►  6월 (1)
    • ►  5월 (2)
    • ►  4월 (2)
  • ►  2020 (12)
    • ►  10월 (1)
    • ►  9월 (2)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (5)
    • ►  4월 (1)
    • ►  2월 (1)
  • ►  2019 (14)
    • ►  10월 (2)
    • ►  7월 (1)
    • ►  3월 (4)
    • ►  2월 (2)
    • ►  1월 (5)
  • ▼  2018 (14)
    • ►  12월 (2)
    • ►  11월 (4)
    • ►  10월 (1)
    • ▼  8월 (2)
      • Javascript 배열의 모든것 2 ( filter, some, every, reduce )
      • Javascript 배열의 모든 것 1탄 ( 선언, 정렬, 2차원배열, 멀티 소팅, 순열,...
    • ►  5월 (4)
    • ►  1월 (1)
  • ►  2017 (12)
    • ►  10월 (2)
    • ►  9월 (9)
    • ►  5월 (1)
  • ►  2016 (8)
    • ►  10월 (2)
    • ►  8월 (1)
    • ►  6월 (1)
    • ►  1월 (4)
  • ►  2015 (6)
    • ►  12월 (3)
    • ►  10월 (1)
    • ►  6월 (1)
    • ►  5월 (1)
  • ►  2014 (10)
    • ►  11월 (1)
    • ►  9월 (1)
    • ►  7월 (1)
    • ►  6월 (1)
    • ►  5월 (3)
    • ►  4월 (1)
    • ►  3월 (2)
  • ►  2013 (28)
    • ►  12월 (3)
    • ►  11월 (6)
    • ►  10월 (6)
    • ►  9월 (6)
    • ►  8월 (1)
    • ►  7월 (3)
    • ►  6월 (3)

구독

글
Atom
글
댓글
Atom
댓글

로드 중입니다...

각오

직접 해보지 않은 것은 포스팅 하지 않겠습니다.

Copyright © 김보안의 블로깅 | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates