이 문제는 어떻게 유니크한 값을 배열로부터 얻어내느냐에 대한 매우 일반적인 면접 질문입니다.
new Set()을 사용할 수 있습니다.
let fruits = ['banana', 'apple', 'orange', 'watermelon', 'orange', 'apple'];
// 첫번째 방법
let uniqueFruits = Array.from(new Set(fruits));
console.log(uniqueFruits); // returns ['banana', 'apple', 'orange', 'watermelon'];
// 두번째 방법
let uniqueFruits2 = [...new Set(fruits)];
console.log(uniqueFruits); // 위의 결과와 같음.
// 보통 필터로 다시 뽑아내도 되지않나?
let uniqueFruits3 = fruits.filter((item, index) => fruits.indexOf(item) === index);
console.log(uniqueFruits3); // 전 역시 리터럴이 좋습니다. new Set()만큼 간결하지 않아도 직관적이죠. 리액트 할때도 자주 쓰고..
// reduce도 있죠
let uniqueFruits4 = fruits.reduce((unique, item) => unique.includes(item) ? unique : [...unique, item], []);
console.log(uniqueFruits4); // reduce는 연산을 합치는데.. 이렇게 필터링 되는 연산을 반복하는 것도 수행하죠.
let fruits = ['apple', 'banana', 'orange'];
let meats = ['poultry', 'beef', 'fish'];
let vegetables = ['potato', 'tomato', 'cucumber'];
// use spread operator - es6
let foods = [...fruits, ...meats, ...vegetables];
console.log(foods); // 모두 합쳐진 배열이 나옵니다.
// concat() 사용
let foods2 = fruits.concat(meats, vegetables);
console.log(foods2); // 같은 결과. 좀 더 유연한 것 같습니다. es6방법은 직관적인 것 같고..
7. 두 배열 사이에서 같은 값 찾기
let numOne = [0, 2, 4, 6, 8, 8];
let numTwo = [1, 2, 3, 4, 5, 6];
// includes() 사용
let duplicatedValues = [...new Set(numOne)].filter(item => numTwo.includes(item));
console.log(duplicatedValues); // return [2, 4, 6];
// has() 사용
let firstValues = new Set(numOne);
let duplicatedValues2 = numTwo.filter(item => firstValues.has(item));
console.log(duplicatedValues2); // return [2, 4, 6];
for() 또는 foreach()를 사용하고 변수 sum을 선언 한 다음 각 값을 배열에 추가 할 수 있습니다.
ES6에는 reduce()가 있습니다.
let numbers = [5, 15, 20];
let sum = numbers.reduce(function(a, b) {
return a + b;
});
let sub = numbers.reduce((a, b) => {
return a - b;
});
let mul = numbers.reduce((a, b) => {
return a * b;
});
let div = numbers.reduce((a, b) => {
return a / b;
});
console.log(sum); // 40
console.log(sub); // -30
console.log(mul); // 1500
console.log(div); // 0.01666666666
11. 배열 뒤집기
배열의 순서를 바꿀 때 루프와 함수를 통해 구현할 필요 없습니다.
let colors = ['white', 'green', 'navy'];
let reversedColors = colors.reverse();
// 위와 같이 사용하면 원래 배열의 색상 []도 그에 따라 변경됩니다.
// 원래 배열을 변경하지 않으려면 다음과 같이 쓸 수 있습니다.
let reversedColors2 = [...colors].reverse();
// or
let reversedColors3 = colors.slice().reverse();
console.log(reversedColors); // returns ['navy', 'green' 'white'];
console.log(colors); // 같은 결과 - 이미 뒤바뀜
console.log(reversedColors2);
console.log(reversedColors3);
12. 배열에서 가장 작은 숫자 찾기
Math.min()
let numbers = [80, 300, 1500];
let min = Math.min(...numbers);
// or
let min = Math.min.apply(null, numbers);
console.log(min); // 80