c++이나 자바 파이썬의 map, Hashmap, dictionary과 같이 Hash처리하기 위해 마땅히 좋은 방법이 없는거 같다.
아니면 내가 모르는 거겠지...
오랜만에 한 번 사용해봤는데 너무 미숙해서 정리를 하고자 한다.
1
|
var a = [1,2,3,1,2,2,2,3,1,4,6]; // 실험 배열
|
해당 배열을 중복 처리, 객체 정렬등을 해보도록 한다.
중복값의 누적
다른 언어를 사용하다가 자바스크립트를 사용할 때 가장 헷갈리는 부분이다.
자바스크립트는 객체의 키를 배열처럼 접근 할 수 있다.
1
2
3
4
5
6
7
|
obj = {}
obj[1] = 1;
obj // { 1: 1}
obj[1] = ++obj[1];
obj // { 1: 2}
obj[2] = 1;
obj // { 1: 2, 2 : 1}
|
< 접근 예제 >
이를 이용하면 다음과 같이 중복의 누적이 가능하다.
1
2
3
4
|
var b = a.reduce((x,y) => {
x[y] = ++x[y] || 1;
return x;
},{}); // { 1:3, 2:4, 3:2, 4:1, 6:1}
|
< 중복의 누적 >
이때 핵심은 index 접근이 아닌 전달받는 값이 곧 index가 된다는 점
각각의 key value는 다음과 같이 접근 가능하다.
1
2
3
4
5
|
for(value in b){
value // 1,2,3,4,6 => KEY값
b // {1:3 2:4 ....}
console.log(b[value]) // 3, 4, 2, 1, 1 => VALUE 값
}
|
< KEY와 VALUE의 접근 >
다만 이 방법은 정렬이 필요할 시에 적합하지 않다. 정렬 하기 위해서 JSON객체처럼 배열에 담아야 한다.
JSON 객체처럼 누적하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class pair{
constructor(){
this.key;
this.value;
}
}
var c = a.reduce((pre,post,idx) => {
if(!pre[post]){
pre[post] = new pair()
pre[post].key = post
pre[post].value = 1
}else{
pre[post].value++
}
return pre;
},[]).filter(value => value)
console.log(c);
// [ pair { key: 1, value: 3 },
// pair { key: 2, value: 4 },
// pair { key: 3, value: 2 },
// pair { key: 4, value: 1 },
// pair { key: 6, value: 1 } ]
|
일단 그냥 객체가 아니라 클래스를 만들어 줘야 한다. 아니면 다른 인스턴스를 주입할수 없기 때문에 하나의 객체가 배열에 담기기 때문이다.
그 다음은 값이 없다면 새로운 인스턴스를 생성하고 아니라면 값을 늘려준다.
이 때 배열에 값을 추가할 떄, 인덱스 순이 아니라 특정 값을 통해 접근하기 때문에 배열에 빈 값이 생길 수 있다.
그렇기 때문에 filter를 하여 없는 값은 제거해 준다.
이렇게 값을 얻었다면 json객체를 다루듯 정리하면 된다.
1
2
3
4
5
6
7
8
9
10
|
c.sort((pre,post)=> {
return pre.value - post.value
})
console.log(c)
// [ pair { key: 4, value: 1 },
// pair { key: 6, value: 1 },
// pair { key: 3, value: 2 },
// pair { key: 1, value: 3 },
// pair { key: 2, value: 4 } ]
|
< value 순으로 정렬해보았다 >
'Language > JavaScript(ES6)' 카테고리의 다른 글
타입 스크립트 시작하기(with Next) (0) | 2019.08.19 |
---|---|
비동기(Promise, Axios, Redux-thunk,async/await) (0) | 2019.07.05 |
[Javascirpt]함수형 자바스크립트 강의 정리(2) (0) | 2019.02.13 |
[Javascirpt]함수형 자바스크립트 강의 정리 (0) | 2019.02.11 |
[ES6]Destructuring assignment (0) | 2019.02.08 |