function solution(numbers) {
let answer = [];
for(let i = 0; i < numbers.length; i++){
for(let j = i + 1; j < numbers.length; j++){
let sum = numbers[i] + numbers[j];
if(answer.indexOf(sum) === -1){
answer.push(sum);
}
}
}
answer.sort((a,b)=> a-b);
return answer;
}
for()
: 반복문
sort()
: 오름차순
indexOf()
: String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환, 일치하는 값이 없으면 -1을 반환
(출처 : String.prototype.indexOf())
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)
}
...new Set
: 전개 구문(spread operator), 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수 (함수로 호출할 경우) 또는 요소 (배열 리터럴의 경우)로 확장하여, 0개 이상의 키-값의 쌍으로 객체로 확장
기존 배열이나 객체의 전체 또는 일부를 다른 배열이나 객체로 빠르게 복사
배열에서의 spread 연산자+
const fruitOne = ['apple', 'banana'];
const fruitTwo = ['grape', 'peach'];
// 기존 방법
var fruitAll = fruitOne.concat(fruitTwo);
console.log(fruitAll); // ['apple', 'banana', 'grape', 'peach']
// slice 사용
var fruitOne = ['apple', 'banana'];
var fruitTwo = fruitOne.slice();
var fruitTwo.push('grape');
console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']
// map 사용
var fruitOne = ['apple', 'banana'];
var fruitTwo = fruitOne.map((item) => item);
var fruitTwo.push('grape');
console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']
// ES6 spread 연산사 활용 방법
const fruitAll = [...fruitOne, ...fruitTwo];
console.log(fruitAll); // ['apple', 'banana', 'grape', 'peach']
// spread 연산자 사용
const fruitOne = ['apple', 'banana'];
const fruitTwo = [...fruitOne, 'grape'];
console.log(fruitOne); // ['apple', 'banana']
console.log(fruitTwo); // ['apple', 'banana', 'grape']
// 객체에서의 spread 연산자
let user = { name: 'Kim', city: 'Seoul' };
user = { ...user, age: 28 };
console.log (user); // { name: 'Kim', city: 'Seoul', age: 28 }
user = { ...user, name: 'John', age: 30 }
console.log(user); // { name: 'John', city: 'Seoul', age: 30 }
(출처 : 스프레드 연산자)
(출처 : spread operator)
Set
: 객체는 값의 컬렉션, Set의 값은 한 번만 나타날 수 있으며, Set의 컬렉션에서는 고유한 값 Set의 요소를 삽입 순서대로 순회, 삽입 순서는 각 요소가 add() 메서드에 의해 Set에 성공적으로 삽입된 순서(즉, add()가 호출될 때 이미 Set에 동일한 요소가 없는 경우)에 해당
const a = new Set([1, 2, 3]);
const b = new Map([
[1, "one"],
[2, "two"],
[4, "four"],
]);
console.log(a.union(b)); // Set(4) {1, 2, 3, 4}
// set
const empty = new Set();
console.log(empty); // Set(0) {}
const nums = new Set([1, 2, 3, 4, 5]);
console.log(nums); // Set(5) { 1, 2, 3, 4, 5 }
const str = new Set('HELLO');
console.log(str); // Set(4) { 'H', 'E', 'L', 'O' }
const objArr = new Set([
{name:'라이언',company:'kakao'},
{name:'브라운',company:'naver'},
{name:'프로도',company:'kakao'},
{name:'라이언',company:'kakao'},
{name:'펭수',company:'ebs'}
]);
console.log(objArr);
/* Set(5) {
{ name: '라이언', company: 'kakao' },
{ name: '브라운', company: 'naver' },
{ name: '프로도', company: 'kakao' },
{ name: '라이언', company: 'kakao' },
{ name: '펭수', company: 'ebs' }
} */
const nums = new Set([1, 2, 3, 4, 5]);
nums.add(200);
console.log(nums); // Set(6) { 1, 2, 3, 4, 5, 200 }
nums.delete(2);
console.log(nums); // Set(5) { 1, 3, 4, 5, 200 }
const isChecked = nums.has(200);
console.log(isChecked); // true
const checkSize = nums.size;
console.log(checkSize); // 5
nums.clear();
console.log(nums); // Set(0) {}
const strArr = new Set(['A', 'B', 'C', 'D', 'E']); // new Set('ABCDE') 일때도 결과는 같다
console.log(strArr); // Set(5) { 'A', 'B', 'C', 'D', 'E' }
for (const alphabet of strArr) {
console.log(alphabet); // A B C D E
}
for (const alphabet of strArr.keys()) {
console.log(alphabet); // A B C D E
}
for (const alphabet of strArr.values()) {
console.log(alphabet); // A B C D E
}
const names = new Set([ 'john', 'alice', 'john' ]);
console.log(names); // Set(2) { 'john', 'alice' }
const check1 = Array.from(names);
console.log(check1); // [ 'john', 'alice' ]
const check2 = [ ...names ];
console.log(check2); // [ 'john', 'alice' ]
(출처 : Set)
(출처 : [JavaScript] new Set() 이란?)