반응형
Javascript 쓰다 보면 [] (Array)를 쓸 일이 굉장히 많다.
그리고 array 값 중 중복된 값들을 제거하고 싶을 때가 온다.
일단 array 내 element 가 object 가 아님을 전제로 하였을 때
new Set() 를 사용한다.
set 객체는 자료형에 상관없이 유일한 값만 저장시킨다고 모질라에 나와있지만 확인 결과, object 형식은 안되는 것 같다.
var arr = [];
for (var i = 0; i < 5; i++) {
arr.push("a");
}
var newArr = [...new Set(arr)];
console.log("===== String =====");
console.log(newArr);
console.log("===== String =====");
var arr = [];
for (var i = 0; i < 5; i++) {
arr.push({ name: "a", value: 1 });
}
var newArr = [...new Set(arr)];
console.log("===== Object =====");
console.log(newArr);
console.log("===== Object =====");
그래서 다시 구글링을 해봤다
stackoverflow.com/questions/2218999/how-to-remove-all-duplicates-from-an-array-of-objects
var arr = [];
for (var i = 0; i < 5; i++) {
arr.push({ name: "a", value: 1 });
}
var newArr = arr.filter((item, index, array) => array.findIndex(compared => (compared.name === item.name && compared.value === item.value)) === index);
console.log("===== filtered =====");
console.log(newArr);
console.log("===== filtered =====");
같은 값을 가지고 있는 것 중에 index가 가장 빠른 것들의 값만 추리는 것 같다.
다른 방법이 없는지 다음에 더 찾아보겠다.
------ 2021-04-22
developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
모질라에 reducer를 이용하여 배열의 중복항목 제거 방법이 나와있길래 시도해보려 한다.
사실 이 포스팅 수정하다가 알게 됨!
예제는 이렇다
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce((accumulator, current) => {
const length = accumulator.length
if (length === 0 || accumulator[length - 1] !== current) {
accumulator.push(current);
}
return accumulator;
}, []);
console.log(result); //[1,2,3,4,5]
위의 방법을 응용하여 해보았다.
var arr = [];
for (var i = 0; i < 5; i++) {
arr.push("a");
}
var result = arr.reduce((rv, current) => {
var length = rv.length;
if (length === 0 || rv[length - 1]["name"] !== current["name"]) {
rv.push(current);
}
return rv;
}, []);
된다!
(단 이 방법은 안에 객체가 모두 같은 데이터를 갖고 있기에 가능했던 것이고
만약 value가 다 다른 객체였다면 일단 sort를 먼저 한 다음에 해야 빼먹은 요소 없이 중복제거가 가능하다.)
반응형
'Javascript' 카테고리의 다른 글
[Javascript] string 공백 지우기, Removing whitespace (0) | 2021.09.01 |
---|---|
[Javascript] Array.from(), Array.prototype.reduce() (feat. 프로그래머스 다리를 지나는 트럭) (0) | 2021.04.21 |
[Javascript] Optional Chaining ( ?.) (0) | 2021.04.07 |
[Javascript] Array.prototype.some(), Array.prototype.every() (0) | 2021.03.31 |
[Javascript] if, if~else if~else, for, while, forEach (0) | 2021.03.31 |