중복을 제외한 유니크한 문자 수를 카운트해서 반환하는 문제를 풀며 정리하는 글
ex) google -> g,o,l,e -> 4 반환
const arr = [1,2,3,3,5];
const set = new Set(arr); //Set { 1, 2, 3, 5 }
const uniqueArr = [...set]; //[ 1, 2, 3, 5 ]
// 배열의 중복 요소 제거
const uniq = array => array.filter((v, i, self) => self.indexOf(v) === i);
console.log(uniq([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
// Set을 사용한 배열의 중복 요소 제거
const uniq = array => [...new Set(array)];
console.log(uniq([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
const arr = [1,2,3,3,5];
const uniqueArr = arr.filter((element,index) => {
return arr.indexOf(element) === index;
});
const arr = [1,2,3,3,5];
const uniqueArr = [];
arr.forEach((element) => {
if(!uniqueArr.includes(element)) {
uniqueArr.push(element);
}
});
const arr = ['a','b','a','b','c'];
const result = {}; //중복된 값의 개수 저장을 위한 객체 선언
arr.forEach((x) => { //배열(arr)의 각 원소들을 순서대로 callback 함수에 전달
result[x] = (result[x] || 0)+1;
});
// 아래 코드는 result[x] = (result[x] || 0)+1; 가 의미하는 바와 같다.
if(result[x]) {
result[x] = result[x] + 1; //값이 이미 세팅되어있을경우,true
}else {
result[x] = 0 + 1; //undefined일경우
}
//처음에 배열의 첫번째 값 'a'가 들어오면 result[x], 즉 result.a는 undefined이다.
//result.a가 undefined이므로 result에 a속성을 추가하고,0+1 (==1)을 세팅한다. (b도 마찬가지)
// 배열의 세번째 값 'a'가 들어오면, 이번에는 result.a의 값이 1로 세팅되어 있으므로, result.a의 값을 result.a + 1 (==2)로 세팅해서 카운트함
const arr = ['a', 'b', 'a', 'b', 'c'];
const result = arr.reduce((accu,curr)=> {
accu.set(curr, (accu.get(curr)||0) +1) ;
return accu;
},new Map());
for (let [key, value] of result.entries()) {
document.write(key + ' : ' + value + '<br>');//{"a":2,"b":2,"c":1}
}
const arr = ['a', 'b', 'a', 'b', 'c'];
const result = arr.reduce((accu, curr) => {
accu[curr] = (accu[curr] || 0)+1;
return accu; //{"a":2,"b":2,"c":1}
}, {});
reduce는 쓰임이 많아서 따로 정리하면 좋을 것 같다
ㄴ reduce