출처 : 프로그래머스
사용 언어 : JavaScript
function solution(numbers) {
var answer = [];
return answer;
}
function solution(numbers) {
var answer = [];
let sum=0;
let n=0;
for(n;n<numbers.length;n++){
let m=n+1;
for(m;m<numbers.length;m++){
if(numbers.indexOf(numbers[n])!==numbers.lastIndexOf(numbers[m])){
sum=numbers[n]+numbers[m]
answer.push(sum)
}
}
}
let num= answer.filter((n,index)=>answer.indexOf(n)===index);
return num.sort((a,b)=>a-b);
}
function solution(numbers) {
const temp = []
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j])
}
}
const answer = [...new Set(temp)]
return answer.sort((a, b) => a - b)
}
✨
Set
과 확산 연산자로 배열 중복 제거
(Set
객체는Map
객체에서 값이 없고 키만 있는 것으로 알기! )
Set
객체 생성자는 배열을 인자로 받아서 중복이 없는Set
객체를 반환하는 특징이 있다.
=> 중복이 없는 배열을 다시 만들 수 있음.
중복 있는 배열 ->Set
-> 확산 연산자로 펼침 -> 배열로 생성 과정을 거쳐 중복 없는 배열이 만들어 짐.
단순히 배열의 중복을 없애는 것이 목적이면 좋은 방법!
✨Filter
로 객체 배열의 중복 제거
indexOf()
메서드는 인자로 넘긴 값이 나오는 첫 번째 인덱스를 바로 반환할 수 있지만,
객체가 요소인 배열에서는 객체의 내부 값을 비교해야 하기 때문에 !
비교 함수 정의가 가능한findIndex()
의 인자로 객체의 값(들)을 비교하는 비교 함수를 넘겨서 첫 번째 값이 일치하는 객체의 배열 인덱스를 가져와야 한다!
참고 블로그 : 링크텍스트
처음에 indexOf()
만을 가지고 비교하려다 가장 처음의 인덱스만 가져와서 헤맸었다.
그래서lastIndexOf()
를 이용해 값은 같고 인덱스는 다른 값을 찾았다.
하지만 findIndex()
를 이용하면 이런 번거로운 과정 없이 한번에 찾을 수 있으니 다음부턴 이 방법을 !
혹은 Set사용을 !😋
또 다른 방법으로는 if(answer.indexOf(numbers[i]+numbers[j])===-1)
인덱스에 값이 안 들어가 있다면 값을 배열에 넣어주기.
if(i===j) continue;
동일한 인덱스는 스킵해주기.
if(!answer.includes(numbers[i]+numbers[k]))
includes
로 값이 없을 때 넣어주기.
등 여러 방법도 있었다 !!!
✨
includes()
: 배열이 특정 요소를 포함하고 있는지 판별
->arr.includes(valueToFind[, fromIndex])
const array1 = [1, 2, 3]; console.log(array1.includes(2)); // expected output: true const pets = ['cat', 'dog', 'bat']; console.log(pets.includes('cat')); // expected output: true console.log(pets.includes('at')); // expected output: false