기본 콘텐츠로 건너뛰기

라벨이 reduce인 게시물 표시

spectrum 에게 물어보세요. multiple option을 flat 하게 하고 싶어요.

질문: 쇼핑몰에서 옵션이 여러개 있는데 이걸 조합해서 보여주고 싶어요. 사이즈: s, m, l 색상: blue, red 길이: short, long 대상: girl, boy, woman, man 이라고 했을 때 s blue short woman 이런 식으로요. 답변: reduce 를 사용하세요. 풀이 예제  << 클릭하면 coffee/js 소스랑 결과값 모두 볼 수 있어요. Array::flatMap = (lambda) ->   @concat.apply [], @.map lambda v=[  ['s','m','l']  ['blue','red']  ['short', 'long']  ['girl', 'boy', 'woman', 'man'] ] console.log "result\n",   v.reduce (x1,x2)->     x1.map (o)->       x2.map (p)->         "#{o} #{p}"     .flatMap (o)->o 분류의 갯수는 상관없어요. 두개를 순서대로 합쳐야한다! 싶을 때는 reduce로 어떻게 해봐야지! 하고 시작하는게 좋아요. 먼저 ['s', 'm', 'l'] 하고 ['blue', 'red'] 만 놓고 보자구요. map으로 이중 루프를 돌면서 둘을 조합하면 되겠지요? ['s', 'm', 'l'].map (o)->   ['blue', 'red'].map (p)->     "#{o} #{p}" 근데 이렇게 하면 [["s blue","s r

map과 reduce를 사용하여 distinct(group by) 하는 방법

oracle 같은 RDB 를 다루던 시절엔 user | dept ----------- john | 0000 tom | 0001 jack | 0000 jane | 0001 과 같은 형태의 테이블일때 부서의 목록을 뽑아 내고자 group by 나 distinct 를 사용하여 dept ----- 0000 0001 이와 같이 뽑아내곤 했는데 noSQL 을 사용하거나 array collection 형태의 데이터를 다룰때에도 이런 작업을 해야할 경우가 있다. 일단 예제로 다뤄볼 대상 collection 의 구조를 가정해 보자. documents = [   {     _id: "........",     message: "......",     user : {       _id: "........",       profile: {         displayName: "....."       }     } ] 흔한 게시판 형태의 데이터 구조라고 볼 수 있는데 각 documents 마다 고유한 _id 를 가지고 있고 해당 documents 를 작성한 user 객체가 각각 들어있는 경우라고 볼 수 있다. 그렇다면 documents 를 작성한 user 의 목록을 뽑아낼 수는 없을까? node 콘솔이나 브라우저용 개발 툴에서 복사 붙이기 용으로 코드를 예제 코드를 한번 넣어보자면 documents = [ { _id: "doc0001", message: "document 01", user: { _id: "user0001", profile: { displayName: "john", } } }, { _id: "doc0002", message: "document 02", user: {

Array function - Iteration

이것만은 꼭 알고 이해하고 손에 익숙해두자. forEach : 배열의 갯수만큼 반복 map : return 값을 인자로 배열을 반환 reduce : return 값과 배열을 인자로 연산 some : return 이 하나라도 참이면 참을 반환 every : return 이 모두 참이면 참을 반환 sort : return 이 참인 기준의 순방향 정렬 filter : return 이 참인 것들의 배열을 반환 배열을 만들고 직접 돌려보고 느껴보자. reduce 로 sum, min, max를 한다던가 every 로 transaction처리를 한다던가 하는 걸 예로 들면 사고의 폭이 좁아질 수도 있으니 돌려보면서 현상을 관찰하는게 좋다. 기타 함수 concat : 배열들을 연결 indexOf : 인자의 위치를 반환 join : 인자로 배열들을 연결 slice : from<to 범위의 배열을 반환 splice : from에서 n개만큼 배열을 잘라내고 그 부분을 반환 push, pop : 배열의 뒷쪽에 넣고 빼기 unshift, shift : 배열의 앞쪽에서 넣고 빼기