λ°°μ΄(array)μ μ¬λ¬ κ°μ κ°μ μμ°¨μ μΌλ‘ λμ΄ν μλ£κ΅¬μ‘°λ€. λ°°μ΄μ΄ κ°μ§κ³ μλ κ°μ μμ(element)λΌκ³ λΆλ₯΄κ³ μλ°μ€ν¬λ¦½νΈμ λͺ¨λ κ°μ λ°°μ΄μ μμκ° λ μ μλ€. λ°°μ΄μ μμλ μΈλ±μ€(index)λ₯Ό κ°μ§λ©° λ°°μ΄μ μμμ κ°μ μ¦, λ°°μ΄μ κΈΈμ΄λ₯Ό λνλ΄λ length νλ‘νΌν°λ₯Ό κ°λλ€.
const arr = ['apple', 'banana', 'orange'];
arr.length // -> 3
μλ°μ€ν¬λ¦½νΈμ λ°°μ΄μ΄λΌλ νμ μ μ‘΄μ¬νμ§ μλλ€. λ°°μ΄μ κ°μ²΄ νμ μ΄λ€.
λ°°μ΄μ λ°°μ΄ λ¦¬ν°λ΄, Array μμ±μ ν¨μ, Array.of, Array.from λ©μλλ‘ μμ±ν μ μλ€. λ°°μ΄μ μμ±μ ν¨μλ Array μ΄λ©°, λ°°μ΄μ νλ‘ν νμ κ°μ²΄λ Array.prototypeμ΄λ€.
typeof arr // -> object
const arr = [1, 2, 3];
arr.constructor === Array // -> true
Object.getPrototypeOf(arr) === Array.prototype // -> true
λ°°μ΄μ κ°μ²΄μ§λ§ μΌλ° κ°μ²΄μλ λ¬λ¦¬ κ°μ μμμ length νλ‘νΌν°λ₯Ό κ°λλ€. μ΄λ λ°°μ΄μ μμμ μμ°¨μ , μμ, νΉμ μμΉμ μ κ·Όν μ μκ²νλ€.
const arr = [1, 2, 3];
// λ°λ³΅λ¬ΈμΌλ‘ μλ£ κ΅¬μ‘°λ₯Ό μμλλ‘ μννκΈ° μν΄μλ μλ£ κ΅¬μ‘°μ μμμ μμλλ‘
// μ κ·Όν μ μμ΄μΌ νλ©° μλ£ κ΅¬μ‘°μ κΈΈμ΄λ₯Ό μ μ μμ΄μΌ νλ€.
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]); // 1 2 3
}
μΌλ°μ μΈ μλ£κ΅¬μ‘°μμ λ§νλ λ°°μ΄μ μμλ νλμ λ°μ΄ν° νμ μΌλ‘ ν΅μΌλμ΄μμΌλ©° μλ‘ μ°μμ μΌλ‘ μΈμ ν΄μλ€. μ΄λ₯Ό λ°μ§ λ°°μ΄μ΄λΌ νλ€.
μλ°μ€ν¬λ¦½νΈμμμ λ°°μ΄μ λ°°μ΄μ μμλ₯Ό μν κ°κ°μ λ©λͺ¨λ¦¬ 곡κ°μ λμΌν ν¬κΈ°λ₯Ό κ°μ§ μμλ λλ©°, μ°μμ μΌλ‘ μ΄μ΄μ Έ μμ§ μμ μλ μλ€. λ°°μ΄μ μμκ° μ°μμ μΌλ‘ μ΄μ΄μ Έ μμ§ μλ λ°°μ΄μ ν¬μ λ°°μ΄μ΄λΌ νλ€. μ¦, μλ°μ€ν¬λ¦½νΈμ λ°°μ΄μ μΌλ°μ μΈ λ°°μ΄μ λμμ νλ΄λΈ νΉμν κ°μ²΄μ΄λ€.
μΌλ°μ μΈ λ°°μ΄κ³Ό μλ°μ€ν¬λ¦½νΈ λ°°μ΄μ μ₯λ¨μ μ μ 리ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
length νλ‘νΌνΈ κ°μ μμμ κ°μ, μ¦ λ°°μ΄μ κΈΈμ΄λ₯Ό λνλ΄λ 0μ΄μμ μ μλ₯Ό κ°μΌλ‘ κ°λλ€. μΌλ°μ μΈ λ°°μ΄μ lengthλ λ°°μ΄ μμμ κ°μ, μ¦ λ°°μ΄μ κΈΈμ΄μ μΈμ λ μΌμΉνμ§λ§ ν¬μ λ°°μ΄μ lengthλ ν¬μ λ°°μ΄μ μ€μ μμ κ°μλ³΄λ€ μΈμ λ ν¬λ€.
μλμ μΌλ‘ ν¬μ λ°°μ΄μ λ§λ€μ΄μΌ νλ μν©μ λ°μνμ§ μμΌλ―λ‘ ν¬μλ°°μ΄ μ¬μ©μ μ§μνλκ²μ΄ μ’λ€.
λ°°μ΄ λ¦¬ν°λ΄μ 0κ° μ΄μμ μμλ₯Ό μΌνλ‘ κ΅¬λΆνμ¬ λκ΄νΈ([])λ‘ λ¬Άλλ€.
const arr = [1, 2, 3];
console.log(arr.length); // 3
Array μμ±μ ν¨μλ μ λ¬λ μΈμμ κ°μμ λ°λΌ λ€μκ³Ό κ°μ΄ λμνλ€.
// μ λ¬λ μΈμκ° 1κ°μ΄κ³ μ«μμΈ κ²½μ° length νλ‘νΌν° κ°μ΄ μΈμμΈ λ°°μ΄μ μμ±νλ€.
const arr = new Array(10);
console.log(arr); // [empty Γ 10]
console.log(arr.length); // 10
// μ λ¬λ μΈμκ° μλ κ²½μ° λΉ λ°°μ΄μ μμ±νλ€. μ¦, λ°°μ΄ λ¦¬ν°λ΄ []κ³Ό κ°λ€.
new Array(); // -> []
// μ λ¬λ μΈμκ° 2κ° μ΄μμ΄λ©΄ μΈμλ₯Ό μμλ‘ κ°λ λ°°μ΄μ μμ±νλ€.
new Array(1, 2, 3); // -> [1, 2, 3]
// μ λ¬λ μΈμκ° 1κ°μ§λ§ μ«μκ° μλλ©΄ μΈμλ₯Ό μμλ‘ κ°λ λ°°μ΄μ μμ±νλ€.
new Array({}); // -> [{}]
ES6μμ λμ λ Array.of λ©μλλ μ λ¬λ μΈμλ₯Ό μμλ‘ κ°λ λ°°μ΄μ μμ±νλ€.
// μ λ¬λ μΈμκ° 1κ°μ΄κ³ μ«μμ΄λλΌλ μΈμλ₯Ό μμλ‘ κ°λ λ°°μ΄μ μμ±νλ€.
Array.of(1); // -> [1]
Array.of(1, 2, 3); // -> [1, 2, 3]
Array.of('string'); // -> ['string']
ES6μμ λμ λ Array.from λ©μλλ μ μ¬ λ°°μ΄ κ°μ²΄ λλ μ΄ν°λ¬λΈ κ°μ²΄λ₯Ό μΈμλ‘ μ λ¬λ°μ λ°°μ΄λ‘ λ³ννμ¬ λ°ννλ€.
// μ μ¬ λ°°μ΄ κ°μ²΄λ₯Ό λ³ννμ¬ λ°°μ΄μ μμ±νλ€.
Array.from({ length: 2, 0: 'a', 1: 'b' }); // -> ['a', 'b']
// μ΄ν°λ¬λΈμ λ³ννμ¬ λ°°μ΄μ μμ±νλ€. λ¬Έμμ΄μ μ΄ν°λ¬λΈμ΄λ€.
Array.from('Hello'); // -> ['H', 'e', 'l', 'l', 'o']
λ°°μ΄μ μμλ₯Ό μ°Έμ‘°ν λμλ λκ΄νΈ([]) νκΈ°λ²μ μ¬μ©νλ€.
const arr = [1, 2];
// μΈλ±μ€κ° 0μΈ μμλ₯Ό μ°Έμ‘°
console.log(arr[0]); // 1
// μΈλ±μ€κ° 1μΈ μμλ₯Ό μ°Έμ‘°
console.log(arr[1]); // 2
λ°°μ΄μ μ¬μ€ μΈλ±μ€λ₯Ό λνλ΄λ λ¬Έμμ΄μ νλ‘νΌν° ν€λ‘ κ°λ κ°μ²΄λ€. λ°λΌμ μ‘΄μ¬νμ§ μλ νλ‘νΌν° ν€λ‘ κ°μ²΄μ νλ‘νΌν°μ μ κ·Όνμλ undefinedλ₯Ό λ°ννλ κ² μ²λΌ λ°°μ΄λ μ‘΄μ¬νμ§ μλ μμλ₯Όμ°Έμ‘°νλ©΄ undefinedλ₯Ό λ°ννλ€.
λ°°μ΄μ κ°μ²΄μ΄λ―λ‘ λμ μΌλ‘ νλ‘νΌν°(μμ)λ₯Ό μΆκ°ν μ μλ€. μ‘΄μ¬νμ§ μλ μΈλ±μ€λ₯Ό μ¬μ©ν΄ κ°μ ν λΉνλ©΄ μλ‘μ΄ μμκ° μΆκ°λλ€.
const arr = [0];
// λ°°μ΄ μμμ μΆκ°
arr[1] = 1;
console.log(arr); // [0, 1]
console.log(arr.length); // 2
μ΄λ―Έ μ‘΄μ¬νλ μμμ κ°μ μ¬ν λΉνλ©΄ μμκ°μ΄ κ°±μ λλ€. λ§μ½ μ μ μ΄μΈμ κ°μ μΈλ±μ€μ²λΌ μ¬μ©νλ©΄ μμκ° μμ±λλκ²μ΄ μλλΌ νλ‘νΌν°κ° μμ±λκ³ μ΄λ length νλ‘νΌν° κ°μ μν₯μ μ£Όμ§ μλλ€.
// μμκ°μ κ°±μ
arr[1] = 10;
console.log(arr); // [0, 10, empty Γ 98, 100]
const arr = [];
// λ°°μ΄ μμμ μΆκ°
arr[0] = 1;
arr['1'] = 2;
// νλ‘νΌν° μΆκ°
arr['foo'] = 3;
arr.bar = 4;
arr[1.1] = 5;
arr[-1] = 6;
console.log(arr); // [1, 2, foo: 3, bar: 4, '1.1': 5, '-1': 6]
// νλ‘νΌν°λ lengthμ μν₯μ μ£Όμ§ μλλ€.
console.log(arr.length); // 2
λ°°μ΄μ μ¬μ€ κ°μ²΄μ΄κΈ° λλ¬Έμ λ°°μ΄μ νΉμ μμλ₯Ό μμ νκΈ° μν΄ delete μ°μ°μλ₯Ό μ¬μ©ν μ μλ€. μ΄λ delete μ°μ°μλ κ°μ²΄μ νλ‘νΌν°λ₯Ό μμ νλ€. λ°λΌμ λ°°μ΄μ ν¬μ λ°°μ΄μ΄ λλ©° length νλ‘νΌν°μ κ°μ λ³νμ§ μμΌλ―λ‘ delete μ°μ°μλ μ¬μ©νμ§ μλκ²μ΄ μ’λ€.
const arr = [1, 2, 3];
// λ°°μ΄ μμμ μμ
delete arr[1];
console.log(arr); // [1, empty, 3]
// length νλ‘νΌν°μ μν₯μ μ£Όμ§ μλλ€. μ¦, ν¬μ λ°°μ΄μ΄ λλ€.
console.log(arr.length); // 3
Array.isArrayλ Array μμ±μ ν¨μμ μ μ λ©μλλ‘ μ λ¬λ μΈμκ° λ°°μ΄μ΄λ©΄ true, λ°°μ΄μ΄ μλλ©΄ falseλ₯Ό λ°ννλ€.
// true
Array.isArray([]);
Array.isArray([1, 2]);
Array.isArray(new Array());
// false
Array.isArray();
Array.isArray({});
Array.isArray(null);
Array.isArray(undefined);
Array.isArray(1);
Array.isArray('Array');
Array.isArray(true);
Array.isArray(false);
Array.isArray({ 0: 1, length: 1 })
indexOf λ©μλλ μλ³Έ λ°°μ΄μμ μΈμλ‘ μ λ¬λ μμλ₯Ό κ²μνμ¬ μΈλ±μ€λ₯Ό λ°ννλ€.
const arr = [1, 2, 2, 3];
// λ°°μ΄ arrμμ μμ 2λ₯Ό κ²μνμ¬ μ²« λ²μ§Έλ‘ κ²μλ μμμ μΈλ±μ€λ₯Ό λ°ννλ€.
arr.indexOf(2); // -> 1
// λ°°μ΄ arrμ μμ 4κ° μμΌλ―λ‘ -1μ λ°ννλ€.
arr.indexOf(4); // -> -1
// λ λ²μ§Έ μΈμλ κ²μμ μμν μΈλ±μ€λ€. λ λ²μ§Έ μΈμλ₯Ό μλ΅νλ©΄ μ²μλΆν° κ²μνλ€.
arr.indexOf(2, 2); // -> 2
const foods = ['apple', 'banana', 'orange'];
// foods λ°°μ΄μ 'orange' μμκ° μ‘΄μ¬νλμ§ νμΈνλ€.
if (foods.indexOf('orange') === -1) {
// foods λ°°μ΄μ 'orange' μμκ° μ‘΄μ¬νμ§ μμΌλ©΄ 'orange' μμλ₯Ό μΆκ°νλ€.
foods.push('orange');
}
console.log(foods); // ["apple", "banana", "orange"]
push λ©μλλ μΈμλ‘ μ λ¬λ°μ λͺ¨λ κ°μ μλ³Έ λ°°μ΄μ λ§μ§λ§ μμλ‘ μΆκ°νκ³ λ³κ²½λ length νλ‘νΌν° κ°μ λ°ννλ€. push λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
const arr = [1, 2];
// μΈμλ‘ μ λ¬λ°μ λͺ¨λ κ°μ μλ³Έ λ°°μ΄ arrμ λ§μ§λ§ μμλ‘ μΆκ°νκ³ λ³κ²½λ length κ°μ λ°ννλ€.
let result = arr.push(3, 4);
console.log(result); // 4
// push λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [1, 2, 3, 4]
push λ©μλλ μ±λ₯ λ©΄μμ μ’μ§ μλ€. λ§μ§λ§ μμλ‘ μΆκ°ν μμκ° νλλΏμ΄λΌλ©΄ length νλ‘νΌν°λ₯Ό μ¬μ©νμ¬ λ°°μ΄μ λ§μ§λ§ μμμ μ§μ μΆκ°νλκ²μ΄ λ λΉ λ₯΄λ€.
const arr = [1, 2];
// arr.push(3)κ³Ό λμΌν μ²λ¦¬λ₯Ό νλ€. μ΄ λ°©λ²μ΄ push λ©μλλ³΄λ€ λΉ λ₯΄λ€.
arr[arr.length] = 3;
console.log(arr); // [1, 2, 3]
pop λ©μλλ μλ³Έ λ°°μ΄μμ λ§μ§λ§ μμλ₯Ό μ κ±°νκ³ μ κ±°ν μμλ₯Ό λ°ννλ€. μλ³Έ λ°°μ΄μ΄ λΉ λ°°μ΄μ΄λ©΄ undefinedλ₯Ό λ°ννλ€. push λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
const arr = [1, 2];
// μλ³Έ λ°°μ΄μμ λ§μ§λ§ μμλ₯Ό μ κ±°νκ³ μ κ±°ν μμλ₯Ό λ°ννλ€.
let result = arr.pop();
console.log(result); // 2
// pop λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [1]
pop λ©μλμ pusth λ©μλλ₯Ό μ¬μ©νλ©΄ μ€νμ μ½κ² ꡬνν μ μλ€.
π§ μ€ν(stack)
μ€νμ λ°μ΄ν°λ₯Ό λ§μ§λ§μ λ°μ΄ λ£κ³ , λ§μ§λ§μ λ°μ΄ λ£μ λ°μ΄ν°λ₯Ό λ¨Όμ κΊΌλ΄λ νμ μ μΆ(LIFO - Last In First Out) λ°©μμ μλ£κ΅¬μ‘°μ΄λ€. μλ μμ λ μ€νμ μμ±μ ν¨μ / ν΄λμ€λ‘ λνλΈ κ²μ΄λ€.
const Stack = (function () { function Stack(array = []) { if (!Array.isArray(array)) { // "47. μλ¬ μ²λ¦¬" μ°Έκ³ throw new TypeError(`${array} is not an array.`); } this.array = array; } Stack.prototype = { // "19.10.1. μμ±μ ν¨μμ μν νλ‘ν νμ μ κ΅μ²΄" μ°Έκ³ constructor: Stack, // μ€νμ κ°μ₯ λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ°μ΄ λ£λλ€. push(value) { return this.array.push(value); }, // μ€νμ κ°μ₯ λ§μ§λ§ λ°μ΄ν°, μ¦ κ°μ₯ λμ€μ λ°μ΄ λ£μ μ΅μ λ°μ΄ν°λ₯Ό κΊΌλΈλ€. pop() { return this.array.pop(); }, // μ€νμ 볡μ¬λ³Έ λ°°μ΄μ λ°ννλ€. entries() { return [...this.array]; } }; return Stack; }()); const stack = new Stack([1, 2]); console.log(stack.entries()); // [1, 2] stack.push(3); console.log(stack.entries()); // [1, 2, 3] stack.pop(); console.log(stack.entries()); // [1, 2] ``````jsx class Stack { #array; // private class member constructor(array = []) { if (!Array.isArray(array)) { throw new TypeError(`${array} is not an array.`); } this.#array = array; } // μ€νμ κ°μ₯ λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ°μ΄ λ£λλ€. push(value) { return this.#array.push(value); } // μ€νμ κ°μ₯ λ§μ§λ§ λ°μ΄ν°, μ¦ κ°μ₯ λμ€μ λ°μ΄ λ£μ μ΅μ λ°μ΄ν°λ₯Ό κΊΌλΈλ€. pop() { return this.#array.pop(); } // μ€νμ 볡μ¬λ³Έ λ°°μ΄μ λ°ννλ€. entries() { return [...this.#array]; } } const stack = new Stack([1, 2]); console.log(stack.entries()); // [1, 2] stack.push(3); console.log(stack.entries()); // [1, 2, 3] stack.pop(); console.log(stack.entries()); // [1, 2]
unshift λ©μλλ μΈμλ‘ μ λ¬λ°μ λͺ¨λ κ°μ μλ³Έ λ°°μ΄μ μ λμ μμλ‘ μΆκ°νκ³ λ³κ²½λ length νλ‘νΌν° κ°μ λ°ννλ€. unshift λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
const arr = [1, 2];
// μΈμλ‘ μ λ¬λ°μ λͺ¨λ κ°μ μλ³Έ λ°°μ΄μ μ λμ μμλ‘ μΆκ°νκ³ λ³κ²½λ length κ°μ λ°ννλ€.
let result = arr.unshift(3, 4);
console.log(result); // 4
// unshift λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [3, 4, 1, 2]
shift λ©μλλ μλ³Έ λ°°μ΄μμ 첫 λ²μ§Έ μμλ₯Ό μ κ±°νκ³ μ κ±°ν μμλ₯Ό λ°ννλ€. μλ³Έ λ°°μ΄μ΄ λΉ λ°°μ΄μ΄λ©΄ undefinedλ₯Ό λ°ννλ€. shift λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
const arr = [1, 2];
// μλ³Έ λ°°μ΄μμ 첫 λ²μ§Έ μμλ₯Ό μ κ±°νκ³ μ κ±°ν μμλ₯Ό λ°ννλ€.
let result = arr.shift();
console.log(result); // 1
// shift λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [2]
shift λ©μλμ push λ©μλλ₯Ό μ¬μ©νλ©΄ νλ₯Ό μ½κ² ꡬνν μ μλ€.
π§ ν(queue)
νλ λ°μ΄ν°λ₯Ό λ§μ§λ§μ λ°μ΄ λ£κ³ , κ°μ₯ λ¨Όμ λ°μ΄ λ£μ λ°μ΄ν°λ₯Ό λ¨Όμ κΊΌλ΄λ μ μ μ μΆ(FIFO - First in First Out) λ°©μμ μλ£κ΅¬μ‘°μ΄λ€. μλ μμ λ νλ₯Ό μμ±μ ν¨μ / ν΄λμ€λ‘ λνλΈ κ²μ΄λ€.
const Queue = (function () { function Queue(array = []) { if (!Array.isArray(array)) { // "47. μλ¬ μ²λ¦¬" μ°Έκ³ throw new TypeError(`${array} is not an array.`); } this.array = array; } Queue.prototype = { // "19.10.1. μμ±μ ν¨μμ μν νλ‘ν νμ μ κ΅μ²΄" μ°Έκ³ constructor: Queue, // νμ κ°μ₯ λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ°μ΄ λ£λλ€. enqueue(value) { return this.array.push(value); }, // νμ κ°μ₯ μ²μ λ°μ΄ν°, μ¦ κ°μ₯ λ¨Όμ λ°μ΄ λ£μ λ°μ΄ν°λ₯Ό κΊΌλΈλ€. dequeue() { return this.array.shift(); }, // νμ 볡μ¬λ³Έ λ°°μ΄μ λ°ννλ€. entries() { return [...this.array]; } }; return Queue; }()); const queue = new Queue([1, 2]); console.log(queue.entries()); // [1, 2] queue.enqueue(3); console.log(queue.entries()); // [1, 2, 3] queue.dequeue(); console.log(queue.entries()); // [2, 3]
class Queue { #array; // private class member constructor(array = []) { if (!Array.isArray(array)) { throw new TypeError(`${array} is not an array.`); } this.#array = array; } // νμ κ°μ₯ λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ°μ΄ λ£λλ€. enqueue(value) { return this.#array.push(value); } // νμ κ°μ₯ μ²μ λ°μ΄ν°, μ¦ κ°μ₯ λ¨Όμ λ°μ΄ λ£μ λ°μ΄ν°λ₯Ό κΊΌλΈλ€. dequeue() { return this.#array.shift(); } // νμ 볡μ¬λ³Έ λ°°μ΄μ λ°ννλ€. entries() { return [...this.#array]; } } const queue = new Queue([1, 2]); console.log(queue.entries()); // [1, 2] queue.enqueue(3); console.log(queue.entries()); // [1, 2, 3] queue.dequeue(); console.log(queue.entries()); // [2, 3]
concat λ©μλλ μΈμλ‘ μ λ¬λ κ°λ€(λ°°μ΄ λλ μμκ°)μ μλ³Έ λ°°μ΄μ λ§μ§λ§ μμλ‘ μΆκ°ν μλ‘μ΄ λ°°μ΄μ λ°ννλ€. μΈμλ‘ μ λ¬ν κ°μ΄ λ°°μ΄μΈ κ²½μ° λ°°μ΄μ ν΄μ²΄νμ¬ μλ‘μ΄ λ°°μ΄μ μμλ‘ μΆκ°νλ€. μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€.
const arr1 = [1, 2];
const arr2 = [3, 4];
// λ°°μ΄ arr2λ₯Ό μλ³Έ λ°°μ΄ arr1μ λ§μ§λ§ μμλ‘ μΆκ°ν μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
// μΈμλ‘ μ λ¬ν κ°μ΄ λ°°μ΄μΈ κ²½μ° λ°°μ΄μ ν΄μ²΄νμ¬ μλ‘μ΄ λ°°μ΄μ μμλ‘ μΆκ°νλ€.
let result = arr1.concat(arr2);
console.log(result); // [1, 2, 3, 4]
// μ«μλ₯Ό μλ³Έ λ°°μ΄ arr1μ λ§μ§λ§ μμλ‘ μΆκ°ν μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
result = arr1.concat(3);
console.log(result); // [1, 2, 3]
// λ°°μ΄ arr2μ μ«μλ₯Ό μλ³Έ λ°°μ΄ arr1μ λ§μ§λ§ μμλ‘ μΆκ°ν μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
result = arr1.concat(arr2, 5);
console.log(result); // [1, 2, 3, 4, 5]
// μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€.
console.log(arr1); // [1, 2]
pusth, pop, unshift, shift λ©μλλ λͺ¨λ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ λ©μλμ΄λ©° μλ³Έ λ°°μ΄μ μ²μμ΄λ λ§μ§λ§ μμλ₯Ό μΆκ°νκ±°λ μ κ±°νλ€.
μλ³Έ λ°°μ΄μ μ€κ°μ μμλ₯Ό μΆκ°νκ±°λ μ κ±°νλ κ²½μ° splice λ©μλλ₯Ό μ¬μ©νλ€.
splice λ©μλλ 3κ°μ 맀κ°λ³μκ° μμΌλ©° μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νκ³ λ³κ²½λ μμλ₯Ό λ°ννλ€.
const arr = [1, 2, 3, 4];
// μλ³Έ λ°°μ΄μ μΈλ±μ€ 1λΆν° 2κ°μ μμλ₯Ό μ κ±°νκ³ κ·Έ μ리μ μλ‘μ΄ μμ 20, 30μ μ½μ
νλ€.
const result_1 = arr.splice(1, 2, 20, 30);
// μλ³Έ λ°°μ΄μ μΈλ±μ€ 1λΆν° 0κ°μ μμλ₯Ό μ κ±°νκ³ κ·Έ μ리μ μλ‘μ΄ μμ 100μ μ½μ
νλ€.
const result_2 = arr.splice(1, 0, 100);
// μλ³Έ λ°°μ΄μ μΈλ±μ€ 1λΆν° 2κ°μ μμλ₯Ό μ κ±°νλ€.
const result_3 = arr.splice(1, 2);
// μλ³Έ λ°°μ΄μ μΈλ±μ€ 1λΆν° λͺ¨λ μμλ₯Ό μ κ±°νλ€.
const result_4 = arr.splice(1);
λ°°μ΄μμ νΉμ μμλ₯Ό μ κ±°νλ €λ©΄ indexOf λ©μλλ₯Ό ν΅ν΄ νΉμ μμμ μΈλ±μ€λ₯Ό μ·¨λν λ€μ splice λ©μλλ₯Ό μ¬μ©νλ€.
const arr = [1, 2, 3, 1, 2];
// λ°°μ΄ arrayμμ item μμλ₯Ό μ κ±°νλ€. item μμκ° μ¬λ¬ κ° μ‘΄μ¬νλ©΄ 첫 λ²μ§Έ μμλ§ μ κ±°νλ€.
function remove(array, item) {
// μ κ±°ν item μμμ μΈλ±μ€λ₯Ό μ·¨λνλ€.
const index = array.indexOf(item);
// μ κ±°ν item μμκ° μλ€λ©΄ μ κ±°νλ€.
if (index !== -1) array.splice(index, 1);
return array;
}
console.log(remove(arr, 2)); // [1, 3, 1, 2]
console.log(remove(arr, 10)); // [1, 3, 1, 2]
filter λ©μλλ₯Ό μ¬μ©νμ¬ νΉμ μμλ₯Ό μ κ±°ν μλ μλ€. νμ§λ§ νΉμ μμκ° μ€λ³΅λ κ²½μ° λͺ¨λ μ κ±°λλ€.
const arr = [1, 2, 3, 1, 2];
// λ°°μ΄ arrayμμ λͺ¨λ item μμλ₯Ό μ κ±°νλ€.
function removeAll(array, item) {
return array.filter(v => v !== item);
}
console.log(removeAll(arr, 2)); // [1, 3, 1]
slice λ©μλλ μΈμλ‘ μ λ¬λ λ²μμ μμλ€μ 볡μ¬νμ¬ λ°°μ΄λ‘ λ°ννλ€. μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€. slice λ©μλλ λκ°μ λ°°κ°λ³μλ₯Ό κ°λλ€.
const arr = [1, 2, 3];
// arr[0]λΆν° arr[1] μ΄μ (arr[1] λ―Έν¬ν¨)κΉμ§ 볡μ¬νμ¬ λ°ννλ€.
arr.slice(0, 1); // -> [1]
// arr[1]λΆν° arr[2] μ΄μ (arr[2] λ―Έν¬ν¨)κΉμ§ 볡μ¬νμ¬ λ°ννλ€.
arr.slice(1, 2); // -> [2]
// λ°°μ΄μ λμμλΆν° μμλ₯Ό ν κ° λ³΅μ¬νμ¬ λ°ννλ€.
arr.slice(-1); // -> [3]
// λ°°μ΄μ λμμλΆν° μμλ₯Ό λ κ° λ³΅μ¬νμ¬ λ°ννλ€.
arr.slice(-2); // -> [2, 3]
// μλ³Έμ λ³κ²½λμ§ μλλ€.
console.log(arr); // [1, 2, 3]
slice λ©μλμ μΈμλ₯Ό λͺ¨λ μλ΅νλ©΄ μλ³Έ λ°°μ΄μ 볡μ¬λ³Έμ μμ±ν΄ λ°ννλ€. μ΄λ μμ±λ 볡μ¬λ³Έμ μμ 볡μ¬λ₯Ό ν΅ν΄ μμ±λλ€.
const arr = [1, 2, 3];
// μΈμλ₯Ό λͺ¨λ μλ΅νλ©΄ μλ³Έ λ°°μ΄μ 볡μ¬λ³Έμ μμ±νμ¬ λ°ννλ€.
const copy = arr.slice();
console.log(copy); // [1, 2, 3]
console.log(copy === arr); // false
π§ μμ볡μ¬μ κΉμ볡μ¬
κ°μ²΄λ₯Ό νλ‘νΌν° κ°μΌλ‘ κ°λ κ°μ²΄μ κ²½μ° μμ 볡μ¬λ ν λ¨κ³κΉμ§λ§ 볡μ¬νλ κ²μ λ§νκ³ κΉμ 볡μ¬λ κ°μ²΄μ μ€μ²©λμ΄ μλ κ°μ²΄κΉμ§ λͺ¨λ 볡μ¬νλ κ²μ λ§νλ€. slice λ©μλ, μ€νλ λ λ¬Έλ², Object.assign λ©μλλ λͺ¨λ μμ 볡μ¬λ₯Ό μννλ€.
join λ©μλλ μλ³Έ λ°°μ΄μ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ λ³νν ν, μΈμλ‘ μ λ¬λ°μ λ¬Έμμ΄, μ¦ κ΅¬λΆμλ‘ μ°κ²°ν λ¬Έμμ΄μ λ°ννλ€. ꡬλΆμλ μλ΅ κ°λ₯νλ©° κΈ°λ³Έ ꡬλΆμλ μ½€λ§(β,β)λ€.
const arr = [1, 2, 3, 4];
// κΈ°λ³Έ ꡬλΆμλ ','μ΄λ€.
// μλ³Έ λ°°μ΄ arrμ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ λ³νν ν, κΈ°λ³Έ ꡬλΆμ ','λ‘ μ°κ²°ν λ¬Έμμ΄μ λ°ννλ€.
arr.join(); // -> '1,2,3,4';
// μλ³Έ λ°°μ΄ arrμ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ λ³νν ν, λΉλ¬Έμμ΄λ‘ μ°κ²°ν λ¬Έμμ΄μ λ°ννλ€.
arr.join(''); // -> '1234'
// μλ³Έ λ°°μ΄ arrμ λͺ¨λ μμλ₯Ό λ¬Έμμ΄λ‘ λ³νν ν, ꡬλΆμ ':'λ‘ μ°κ²°ν λ¬Έμμ΄μ λ°ννλ€.γ΄
arr.join(':'); // -> '1:2:3:4'
reverse λ©μλλ μλ³Έ λ°°μ΄μ μμλ₯Ό λ°λλ‘ λ€μ§λλ€. μ΄λ μλ³Έ λ°°μ΄μ΄ λ³κ²½λλ€. λ°νκ°μ λ³κ²½λ λ°°μ΄μ΄λ€.
const arr = [1, 2, 3];
const result = arr.reverse();
// reverse λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [3, 2, 1]
// λ°νκ°μ λ³κ²½λ λ°°μ΄μ΄λ€.
console.log(result); // [3, 2, 1]
fill λ©μλλ μΈμλ‘ μ λ¬λ°μ κ°μ λ°°μ΄μ μ²μλΆν° λκΉμ§ μμλ‘ μ±μ΄λ€. μ΄λ μλ³Έ λ°°μ΄μ΄ λ³κ²½λλ€.
const arr = [1, 2, 3, 4, 5];
// μΈμλ‘ μ λ¬ λ°μ κ° 0μ λ°°μ΄μ μ²μλΆν° λκΉμ§ μμλ‘ μ±μ΄λ€.
arr.fill(0);
console.log(arr); // [0, 0, 0, 0, 0]
// μΈμλ‘ μ λ¬λ°μ κ° 0μ λ°°μ΄μ μΈλ±μ€ 1λΆν° λκΉμ§ μμλ‘ μ±μ΄λ€.
arr.fill(5, 1);
console.log(arr); // [0, 5, 5, 5, 5]
// μΈμλ‘ μ λ¬λ°μ κ° 0μ λ°°μ΄μ μΈλ±μ€ 1λΆν° 3 μ΄μ (μΈλ±μ€ 3 λ―Έν¬ν¨)κΉμ§ μμλ‘ μ±μ΄λ€.
arr.fill(7, 1, 3);
console.log(arr); // [0, 7, 7, 5, 5]
fill λ©μλλ₯Ό μ¬μ©νλ©΄ λ°°μ΄μ μμ±νλ©΄μ νΉμ κ°μΌλ‘ μμλ₯Ό μ±μΈ μ μλ€.
const arr = new Array(3);
console.log(arr); // [empty Γ 3]
// μΈμλ‘ μ λ¬λ°μ κ° 1μ λ°°μ΄μ μ²μλΆν° λκΉμ§ μμλ‘ μ±μ΄λ€.
const result = arr.fill(1);
// fill λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(arr); // [1, 1, 1]
// fill λ©μλλ λ³κ²½λ μλ³Έ λ°°μ΄μ λ°ννλ€.
console.log(result); // [1, 1, 1]
includes λ©μλλ λ°°μ΄ λ΄μ νΉμ μμκ° ν¬ν¨λμ΄ μλμ§ νμΈνμ¬ true λλ falseλ₯Ό λ°ννλ€. 첫 λ²μ§Έ μΈμλ‘ κ²μν λμμ μ§μ νλ€.
const arr = [1, 2, 3];
// λ°°μ΄μ μμ 2κ° ν¬ν¨λμ΄ μλμ§ νμΈνλ€.
arr.includes(2); // -> true
// λ°°μ΄μ μμ 100μ΄ ν¬ν¨λμ΄ μλμ§ νμΈνλ€.
arr.includes(100); // -> false
λ λ²μ§Έ μΈμλ‘ κ²μμ μμν μΈλ±μ€λ₯Ό μ λ¬ν μ μλ€. λ λ²μ§Έ μΈμλ₯Ό μλ΅ν κ²½μ° κΈ°λ³Έκ° 0μ΄ μ€μ λλ€. λ§μ½ λ λ²μ§Έ μΈμμ μμλ₯Ό μ λ¬νλ©΄ length νλ‘νΌν° κ°κ³Ό μμ μΈλ±μ€λ₯Ό ν©μ°νμ¬(length+index) κ²μ μμ μΈλ±μ€λ₯Ό μ€μ νλ€.
const arr = [1, 2, 3];
// λ°°μ΄μ μμ 1μ΄ ν¬ν¨λμ΄ μλμ§ μΈλ±μ€ 1λΆν° νμΈνλ€.
arr.includes(1, 1); // -> false
// λ°°μ΄μ μμ 3μ΄ ν¬ν¨λμ΄ μλμ§ μΈλ±μ€ 2(arr.length - 1)λΆν° νμΈνλ€.
arr.includes(3, -1); // -> true
flat λ©μλλ μΈμλ‘ μ λ¬ν κΉμ΄λ§νΌ μ¬κ·μ μΌλ‘ λ°°μ΄μ ννννλ€. μ€μ²© λ°°μ΄μ νννν κΉμ΄λ₯Ό μΈμλ‘ μ λ¬ν μ μλ€. μΈμλ₯Ό μλ΅ν κ²½μ° κΈ°λ³Έκ°μ 1μ΄λ€. μΈμλ‘ Infinityλ₯Ό μ λ¬νλ©΄ μ€μ²© λ°°μ΄ λͺ¨λλ₯Ό ννννλ€.
[1, [2, 3, 4, 5]].flat(); // -> [1, 2, 3, 4, 5]
// μ€μ²© λ°°μ΄μ ννννκΈ° μν κΉμ΄ κ°μ κΈ°λ³Έκ°μ 1μ΄λ€.
[1, [2, [3, [4]]]].flat(); // -> [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(1); // -> [1, 2, [3, [4]]]
// μ€μ²© λ°°μ΄μ ννννκΈ° μν κΉμ΄ κ°μ 2λ‘ μ§μ νμ¬ 2λ¨κ³ κΉμ΄κΉμ§ ννννλ€.
[1, [2, [3, [4]]]].flat(2); // -> [1, 2, 3, [4]]
// 2λ² νννν κ²κ³Ό λμΌνλ€.
[1, [2, [3, [4]]]].flat().flat(); // -> [1, 2, 3, [4]]
// μ€μ²© λ°°μ΄μ ννννκΈ° μν κΉμ΄ κ°μ Infinityλ‘ μ§μ νμ¬ μ€μ²© λ°°μ΄ λͺ¨λλ₯Ό ννννλ€.
[1, [2, [3, [4]]]].flat(Infinity); // -> [1, 2, 3, 4]
κ³ μ°¨ ν¨μλ ν¨μλ₯Ό μΈμλ‘ μ λ¬λ°κ±°λ ν¨μλ₯Ό λ°ννλ ν¨μλ₯Ό λ§νλ€. ν¨μν νλ‘κ·Έλλ°μ μμν¨μμ 보쑰 ν¨μμ μ‘°ν©μ ν΅ν΄ λ‘μ§ λ΄μ μ‘΄μ¬νλ 쑰건문과 λ°λ³΅λ¬Έμ μ κ±°νμ¬ λ³΅μ‘μ±μ ν΄κ²°νκ³ λ³μμ μ¬μ©μ μ΅μ νμ¬ μν λ³κ²½μ νΌνλ €λ ν¨λ¬λ€μμ΄λ€.
sort λ©μλλ λ°°μ΄μ μμλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€. μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ©° μ λ ¬λ λ°°μ΄μ λ°ννλ€.
const fruits = ['Banana', 'Orange', 'Apple'];
// μ€λ¦μ°¨μ(ascending) μ λ ¬
fruits.sort();
// sort λ©μλλ μλ³Έ λ°°μ΄μ μ§μ λ³κ²½νλ€.
console.log(fruits); // ['Apple', 'Banana', 'Orange']
sort λ©μλμ κΈ°λ³Έ μ λ ¬ μμλ μ λμ½λ μ½λν¬μΈνΈμ μμλ₯Ό λ°λ₯Έλ€. λ°λΌμ μ«μ μμλ₯Ό μ λ ¬ν λλ sort λ©μλμ μ λ ¬ μμλ₯Ό μ μνλ λΉκ΅ ν¨μλ₯Ό μΈμλ‘ μ λ¬ν΄μΌ νλ€. λΉκ΅ ν¨μλ μμλ μμ λλ 0μ λ°νν΄μΌ νλ€.
π§ λΉκ΅ν¨μ
compareFunction νλΌλ―Έν°λ λ€μκ³Ό κ°μ΄ sort λ©μλμ μΈμλ‘ μ λ¬λλ€. compareFunctionλ₯Ό μ μΈν κ²½μ° sort() ν¨μλ compareFunction μκ² λ°°μ΄μ μμ 2κ°μ§λ₯Ό λ°λ³΅ν΄μ λ³΄λΈ λ€, compareFunctionμ΄ λ°ννλ κ°μ κΈ°μ€μΌλ‘ μ λ ¬μ νλ€.
- λ°νκ° < 0 : aκ° bλ³΄λ€ μμ μμ΄μΌ νλ€.
- λ°νκ° = 0 : aμ bμ μμλ₯Ό λ°κΎΈμ§ μλλ€.
- λ°νκ° > 0 : bκ° aλ³΄λ€ μμ μμ΄μΌ νλ€.
const points = [40, 100, 1, 5, 2, 25, 10]; // μ«μ λ°°μ΄μ μ€λ¦μ°¨μ μ λ ¬. λΉκ΅ ν¨μμ λ°νκ°μ΄ 0λ³΄λ€ μμΌλ©΄ aλ₯Ό μ°μ νμ¬ μ λ ¬νλ€. points.sort((a, b) => a - b); console.log(points); // [1, 2, 5, 10, 25, 40, 100] // μ«μ λ°°μ΄μμ μ΅μ/μ΅λκ° μ·¨λ console.log(points[0], points[points.length]); // 1 100 // μ«μ λ°°μ΄μ λ΄λ¦Όμ°¨μ μ λ ¬. λΉκ΅ ν¨μμ λ°νκ°μ΄ 0λ³΄λ€ μμΌλ©΄ bλ₯Ό μ°μ νμ¬ μ λ ¬νλ€. points.sort((a, b) => b - a); console.log(points); // [100, 40, 25, 10, 5, 2, 1] // μ«μ λ°°μ΄μμ μ΅λκ° μ·¨λ console.log(points[0]); // 100
κ°μ²΄λ₯Ό μμλ‘ κ°λ λ°°μ΄μ μ 리νλ μμ λ λ€μκ³Ό κ°λ€.
const todos = [ { id: 4, content: 'JavaScript' }, { id: 1, content: 'HTML' }, { id: 2, content: 'CSS' } ]; // λΉκ΅ ν¨μ. 맀κ°λ³μ keyλ νλ‘νΌν° ν€λ€. function compare(key) { // νλ‘νΌν° κ°μ΄ λ¬Έμμ΄μΈ κ²½μ° - μ°μ μ°μ°μΌλ‘ λΉκ΅νλ©΄ NaNμ΄ λμ€λ―λ‘ λΉκ΅ μ°μ°μ μ¬μ©νλ€. // λΉκ΅ ν¨μλ μμ/μμ/0μ λ°ννλ©΄ λλ―λ‘ - μ°μ μ°μ° λμ λΉκ΅ μ°μ°μ μ¬μ©ν μ μλ€. return (a, b) => (a[key] > b[key] ? 1 : (a[key] < b[key] ? -1 : 0)); } // idλ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ todos.sort(compare('id')); console.log(todos); /* [ { id: 1, content: 'HTML' }, { id: 2, content: 'CSS' }, { id: 4, content: 'JavaScript' } ] */ // contentλ₯Ό κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ todos.sort(compare('content')); console.log(todos); /* [ { id: 2, content: 'CSS' }, { id: 1, content: 'HTML' }, { id: 4, content: 'JavaScript' } ] */
μ λ ¬ν λ°°μ΄μ μμμ κ°μκ° 2κ° λ―Έλ§μΌ κ²½μ° βsort is not a functionβ μ€λ₯κ° λλ€.
forEach λ©μλλ μμ μ λ΄λΆμμ λ°λ³΅λ¬Έμ ν΅ν΄ μμ μ νΈμΆν λ°°μ΄μ μννλ©΄μ μνν΄μΌν μ²λ¦¬λ₯Ό μ½λ°± ν¨μλ‘ μ λ¬λ°μ λ°λ³΅ νΈμΆνλ€. forEach λ©μλλ μΈμ λ undefinedλ₯Ό λ°ννλ€.
const numbers = [1, 2, 3];
let pows = [];
// forEach λ©μλλ numbers λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€.
numbers.forEach(item => pows.push(item ** 2));
console.log(pows); // [1, 4, 9]
forEach λ©μλμ μ½λ°± ν¨μλ forEach λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, foeEach λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μλ€.
// forEach λ©μλλ μ½λ°± ν¨μλ₯Ό νΈμΆνλ©΄μ 3κ°(μμκ°, μΈλ±μ€, this)μ μΈμλ₯Ό μ λ¬νλ€.
[1, 2, 3].forEach((item, index, arr) => {
console.log(`μμκ°: ${item}, μΈλ±μ€: ${index}, this: ${JSON.stringify(arr)}`);
});
/*
μμκ°: 1, μΈλ±μ€: 0, this: [1,2,3]
μμκ°: 2, μΈλ±μ€: 1, this: [1,2,3]
μμκ°: 3, μΈλ±μ€: 2, this: [1,2,3]
*/
forEach λ©μλλ μλ³Έ λ°°μ΄(this)λ₯Ό λ³κ²½νμ§λ μμ§λ§ μ½λ°± ν¨μλ₯Ό ν΅ν΄ μλ³Έ λ°°μ΄μ λ³κ²½ν μ μλ€.
const numbers = [1, 2, 3];
// forEach λ©μλλ μλ³Έ λ°°μ΄μ λ³κ²½νμ§ μμ§λ§ μ½λ°± ν¨μλ₯Ό ν΅ν΄ μλ³Έ λ°°μ΄μ λ³κ²½ν μλ μλ€.
// μ½λ°± ν¨μμ μΈ λ²μ§Έ 맀κ°λ³μ arrμ μλ³Έ λ°°μ΄ numbersλ₯Ό κ°λ¦¬ν¨λ€.
// λ°λΌμ μ½λ°± ν¨μμ μΈ λ²μ§Έ 맀κ°λ³μ arrμ μ§μ λ³κ²½νλ©΄ μλ³Έ λ°°μ΄ numbersκ° λ³κ²½λλ€.
numbers.forEach((item, index, arr) => { arr[index] = item ** 2; });
console.log(numbers); // [1, 4, 9]
forEach λ©μλμ λλ²μ§Έ μΈμλ‘ forEach λ©μλμ μ½λ°±ν¨μ λ΄λΆμμ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€. λ€μ μμ μμ forEach λ©μλμ μ½λ°± ν¨μ λ΄λΆμ thisμ multyply λ©μλ λ΄λΆμ thisλ₯Ό μΌμΉμν€λ €λ©΄ forEach λ©μλμ λλ²μ§Έ μΈμλ‘ thisλ₯Ό μ λ¬νκ±°λ ES6μ νμ΄ν ν¨μλ₯Ό μ¬μ©νλ€.
forEach λ©μλμ ν΄λ¦¬νμ λ€μκ³Ό κ°λ€.
π§ ν΄λ¦¬ν
μ΅μ μ¬μμ κΈ°λ₯μ μ§μνμ§ μλ λΈλΌμ°μ λ₯Ό μν΄ λλ½λ μ΅μ μ¬μμ κΈ°λ₯μ ꡬννμ¬ μΆκ°νλ κ²μ ν΄λ¦¬νμ΄λΌ νλ€.
// λ§μ½ Array.prototypeμ forEach λ©μλκ° μ‘΄μ¬νμ§ μμΌλ©΄ ν΄λ¦¬νμ μΆκ°νλ€. if (!Array.prototype.forEach) { Array.prototype.forEach = function (callback, thisArg) { // 첫 λ²μ§Έ μΈμκ° ν¨μκ° μλλ©΄ TypeErrorλ₯Ό λ°μμν¨λ€. if (typeof callback !== 'function') { throw new TypeError(callback + ' is not a function'); } // thisλ‘ μ¬μ©ν λ λ²μ§Έ μΈμλ₯Ό μ λ¬λ°μ§ λͺ»νλ©΄ μ μ κ°μ²΄λ₯Ό thisλ‘ μ¬μ©νλ€. thisArg = thisArg || window; // for λ¬ΈμΌλ‘ λ°°μ΄μ μννλ©΄μ μ½λ°± ν¨μλ₯Ό νΈμΆνλ€. for (var i = 0; i < this.length; i++) { // call λ©μλλ₯Ό ν΅ν΄ thisArgλ₯Ό μ λ¬νλ©΄μ μ½λ°± ν¨μλ₯Ό νΈμΆνλ€. // μ΄λ μ½λ°± ν¨μμ μΈμλ‘ λ°°μ΄ μμ, μΈλ±μ€, λ°°μ΄ μμ μ μ λ¬νλ€. callback.call(thisArg, this[i], i, this); } }; }
forEach λ©μλλ forλ¬Έκ³Όλ λ¬λ¦¬ break, continue λ¬Έμ μ¬μ©ν μ μλ€. ν¬μ λ°°μ΄μ κ²½μ° μ‘΄μ¬νμ§ μλ μμλ μν λμμμ μ μΈλλ€.
[1, 2, 3].forEach(item => { console.log(item); if (item > 1) break; // SyntaxError: Illegal break statement }); [1, 2, 3].forEach(item => { console.log(item); if (item > 1) continue; // SyntaxError: Illegal continue statement: no surrounding iteration statement }); // ν¬μ λ°°μ΄ const arr = [1, , 3]; // for λ¬ΈμΌλ‘ ν¬μ λ°°μ΄μ μν for (let i = 0; i < arr.length; i++) { console.log(arr[i]); // 1, undefined, 3 } // forEach λ©μλλ ν¬μ λ°°μ΄μ μ‘΄μ¬νμ§ μλ μμλ₯Ό μν λμμμ μ μΈνλ€. arr.forEach(v => console.log(v)); // 1, 3
map λ©μλλ μμ μ νΈμΆν λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ°μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνκ³ , μ½λ°± ν¨μμ λ°νκ°λ€λ‘ ꡬμ±λ μλ‘μ΄ λ°°μ΄μ λ°ννλ€. μ΄λ μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€.
const numbers = [1, 4, 9];
// map λ©μλλ numbers λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€.
// κ·Έλ¦¬κ³ μ½λ°± ν¨μμ λ°νκ°λ€λ‘ ꡬμ±λ μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
const roots = numbers.map(item => Math.sqrt(item));
// μ μ½λλ λ€μκ³Ό κ°λ€.
// const roots = numbers.map(Math.sqrt);
// map λ©μλλ μλ‘μ΄ λ°°μ΄μ λ°ννλ€
console.log(roots); // [ 1, 2, 3 ]
// map λ©μλλ μλ³Έ λ°°μ΄μ λ³κ²½νμ§ μλλ€
console.log(numbers); // [ 1, 4, 9 ]
forEach λ©μλμ λ§μ°¬κ°μ§λ‘ map λ©μλμ μ½λ°± ν¨μλ map λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, map λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μλ€. λ€μ λ§ν΄, map λ©μλλ μ½λ°± ν¨μλ₯Ό νΈμΆν λ 3κ°μ μΈμ, μ¦ λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€ κ·Έλ¦¬κ³ map λ©μλλ₯Ό νΈμΆν λ°°μ΄(this)μ μμ°¨μ μΌλ‘ μ λ¬νλ€.
// map λ©μλλ μ½λ°± ν¨μλ₯Ό νΈμΆνλ©΄μ 3κ°(μμκ°, μΈλ±μ€, this)μ μΈμλ₯Ό μ λ¬νλ€.
[1, 2, 3].map((item, index, arr) => {
console.log(`μμκ°: ${item}, μΈλ±μ€: ${index}, this: ${JSON.stringify(arr)}`);
return item;
});
/*
μμκ°: 1, μΈλ±μ€: 0, this: [1,2,3]
μμκ°: 2, μΈλ±μ€: 1, this: [1,2,3]
μμκ°: 3, μΈλ±μ€: 2, this: [1,2,3]
*/
νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ add λ©μλ λ΄λΆμ thisλ₯Ό κ·Έλλ‘ μ°Έμ‘°ν μμλ€.
class Prefixer {
constructor(prefix) {
this.prefix = prefix;
}
add(arr) {
// νμ΄ν ν¨μ λ΄λΆμμ thisλ₯Ό μ°Έμ‘°νλ©΄ μμ μ€μ½νμ thisλ₯Ό κ·Έλλ‘ μ°Έμ‘°νλ€.
return arr.map(item => this.prefix + item);
}
}
const prefixer = new Prefixer('-webkit-');
console.log(prefixer.add(['transition', 'user-select']));
// ['-webkit-transition', '-webkit-user-select']
filter λ©μλλ μμ μ νΈμΆν λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ°μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€. κ·Έλ¦¬κ³ μ½λ°± ν¨μμ λ°νκ°μ΄ trueμΈ μμλ‘λ§ κ΅¬μ±λ μλ‘μ΄ λ°°μ΄μ λ°ννλ€. μ΄λ μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€.
const numbers = [1, 2, 3, 4, 5];
// filter λ©μλλ numbers λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€.
// κ·Έλ¦¬κ³ μ½λ°± ν¨μμ λ°νκ°μ΄ trueμΈ μμλ‘λ§ κ΅¬μ±λ μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
// λ€μμ κ²½μ° numbers λ°°μ΄μμ νμμΈ μμλ§μ νν°λ§νλ€(1μ trueλ‘ νκ°λλ€).
const odds = numbers.filter(item => item % 2);
console.log(odds); // [1, 3, 5]
filter, map λ©μλμ λ§μ°¬κ°μ§λ‘ filter λ©μλλ μμ μ νΈμΆν λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ°μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€. forEach λ©μλλ μΈμ λ undefinedλ₯Ό λ°ννκ³ , map λ©μλλ μ½λ°± ν¨μμ λ°νκ°λ€λ‘ ꡬμ±λ μλ‘μ΄ λ°°μ΄μ λ°ννμ§λ§ filter λ©μλλ μ½λ°± ν¨μμ λ°νκ°μ΄ trueμΈ μμλ§ μΆμΆν μλ‘μ΄ λ°°μ΄μ λ°ννλ€.
forEach, map λ©μλμ λ§μ°¬κ°μ§λ‘ filter λ©μλμ μ½λ°± ν¨μλ filter λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, filter λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μκ³ , νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€.
filter λ©μλλ μμ μ νΈμΆν λ°°μ΄μμ νΉμ μμλ₯Ό μ κ±°νκΈ° μν΄ μ¬μ©ν μλ μλ€. filter λ©μλλ₯Ό μ¬μ©ν΄ νΉμ μμλ₯Ό μ κ±°ν κ²½μ° νΉμ μμκ° μ€λ³΅λμ΄ μλ€λ©΄ μ€λ³΅λ μμκ° λͺ¨λ μ κ±°λλ€. νΉμ μμλ₯Ό νλλ§ μ κ±°νλ €λ©΄ indexOf λ©μλλ₯Ό ν΅ν΄ νΉμ μμμ μΈλ±μ€λ₯Ό μ·¨λν λ€μ splice λ©μλλ₯Ό μ¬μ©νλ€.
class Users {
constructor() {
this.users = [
{ id: 1, name: 'Lee' },
{ id: 2, name: 'Kim' }
];
}
// μμ μΆμΆ
findById(id) {
// idκ° μΌμΉνλ μ¬μ©μλ§ λ°ννλ€.
return this.users.filter(user => user.id === id);
}
// μμ μ κ±°
remove(id) {
// idκ° μΌμΉνμ§ μλ μ¬μ©μλ₯Ό μ κ±°νλ€.
this.users = this.users.filter(user => user.id !== id);
}
}
const users = new Users();
let user = users.findById(1);
console.log(user); // [{ id: 1, name: 'Lee' }]
// idκ° 1μΈ μ¬μ©μλ₯Ό μ κ±°νλ€.
users.remove(1);
user = users.findById(1);
console.log(user); // []
reduce λ©μλλ μμ μ νΈμΆν λ°°μ΄μ λͺ¨λ μμλ₯Ό μννλ©° μΈμλ‘ μ λ¬λ°μ μ½λ°± ν¨μλ₯Ό λ°λ³΅ νΈμΆνλ€. κ·Έλ¦¬κ³ μ½λ°± ν¨μμ λ°νκ°μ λ€μ μν μμ μ½λ°± ν¨μμ 첫 λ²μ§Έ μΈμλ‘ μ λ¬νλ©΄μ μ½λ°± ν¨μλ₯Ό νΈμΆνμ¬ νλμ κ²°κ³Όκ°μ λ§λ€μ΄ λ°ννλ€. μ΄λ μλ³Έ λ°°μ΄μ λ³κ²½λμ§ μλλ€.
reduce λ©μλλ 첫 λ²μ§Έ μΈμλ‘ μ½λ°± ν¨μ, λ λ²μ§Έ μΈμλ‘ μ΄κΈ°κ°μ μ λ¬λ°λλ€. reduce λ©μλμ μ½λ°± ν¨μμλ 4κ°μ μΈμ, μ΄κΈ°κ° λλ μ½λ°± ν¨μμ μ΄μ λ°νκ°, reduce λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, reduce λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisκ° μ λ¬λλ€.
// [1, 2, 3, 4]μ λͺ¨λ μμμ λμ μ ꡬνλ€.
const sum = [1, 2, 3, 4].reduce((accumulator, currentValue, index, array) => accumulator + currentValue, 0);
console.log(sum); // 10
const values = [1, 2, 3, 4, 5, 6];
const average = values.reduce((acc, cur, i, { length }) => {
// λ§μ§λ§ μνκ° μλλ©΄ λμ κ°μ λ°ννκ³ λ§μ§λ§ μνλ©΄ λμ κ°μΌλ‘ νκ· μ κ΅¬ν΄ λ°ννλ€.
return i === length - 1 ? (acc + cur) / length : acc + cur;
}, 0);
console.log(average); // 3.5
const values = [1, 2, 3, 4, 5];
const max = values.reduce((acc, cur) => (acc > cur ? acc : cur), 0);
console.log(max); // 5
const values = [1, 2, 3, 4, 5];
const max = Math.max(...values);
// var max = Math.max.apply(null, values);
console.log(max); // 5
const fruits = ['banana', 'apple', 'orange', 'orange', 'apple'];
const count = fruits.reduce((acc, cur) => {
// 첫 λ²μ§Έ μν μ accλ μ΄κΈ°κ°μΈ {}μ΄κ³ curμ 첫 λ²μ§Έ μμμΈ 'banana'λ€.
// μ΄κΈ°κ°μΌλ‘ μ λ¬λ°μ λΉ κ°μ²΄μ μμκ°μΈ curμ νλ‘νΌν° ν€λ‘, μμμ κ°μλ₯Ό νλ‘νΌν° κ°μΌλ‘
// ν λΉνλ€. λ§μ½ νλ‘νΌν° κ°μ΄ undefined(μ²μ λ±μ₯νλ μμ)μ΄λ©΄ νλ‘νΌν° κ°μ 1λ‘ μ΄κΈ°ννλ€.
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
// μ½λ°± ν¨μλ μ΄ 5λ² νΈμΆλκ³ λ€μκ³Ό κ°μ΄ κ²°κ³Όκ°μ λ°ννλ€.
/*
{banana: 1} => {banana: 1, apple: 1} => {banana: 1, apple: 1, orange: 1}
=> {banana: 1, apple: 1, orange: 2} => {banana: 1, apple: 2, orange: 2}
*/
console.log(count); // { banana: 1, apple: 2, orange: 2 }
const values = [1, [2, 3], 4, [5, 6]];
const flatten = values.reduce((acc, cur) => acc.concat(cur), []);
// [1] => [1, 2, 3] => [1, 2, 3, 4] => [1, 2, 3, 4, 5, 6]
console.log(flatten); // [1, 2, 3, 4, 5, 6]
[1, [2, 3, 4, 5]].flat(); // -> [1, 2, 3, 4, 5]
// μΈμ 2λ μ€μ²© λ°°μ΄μ ννννκΈ° μν κΉμ΄ κ°μ΄λ€.
[1, [2, 3, [4, 5]]].flat(2); // -> [1, 2, 3, 4, 5]
const values = [1, 2, 1, 3, 5, 4, 5, 3, 4, 4];
const result = values.reduce(
(unique, val, i, _values) =>
// νμ¬ μν μ€μΈ μμμ μΈλ±μ€ iκ° valμ μΈλ±μ€μ κ°λ€λ©΄ valμ μ²μ μννλ μμλ€.
// νμ¬ μν μ€μΈ μμμ μΈλ±μ€ iκ° valμ μΈλ±μ€μ λ€λ₯΄λ€λ©΄ valμ μ€λ³΅λ μμλ€.
// μ²μ μννλ μμλ§ μ΄κΈ°κ° []κ° μ λ¬λ unique λ°°μ΄μ λ΄μ λ°ννλ©΄ μ€λ³΅λ μμλ μ κ±°λλ€.
_values.indexOf(val) === i ? [...unique, val] : unique,
[]
);
console.log(result); // [1, 2, 3, 5, 4]
const values = [1, 2, 1, 3, 5, 4, 5, 3, 4, 4];
// μ€λ³΅μ νμ©νμ§ μλ Set κ°μ²΄μ νΉμ±μ νμ©νμ¬ λ°°μ΄μμ μ€λ³΅λ μμλ₯Ό μ κ±°ν μ μλ€.
const result = [...new Set(values)];
console.log(result); // [1, 2, 3, 5, 4]
reduce λ©μλμ λ λ²μ§Έ μΈμμΈ μ΄κΈ°κ°μ μλ΅ κ°λ₯νλ, μ λ¬νλκ²μ΄ μμ νλ€.some λ©μλλ μμ μ νΈμΆν λ°°μ΄μ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ μ½λ°± ν¨μλ₯Ό νΈμΆνλ€. μ΄λ some λ©μλλ μ½λ°± ν¨μμ λ°νκ°μ΄ λ¨ νλ²μ΄λΌλ μ°Έμ΄λ©΄ true, λͺ¨λ κ±°μ§μ΄λ©΄ falseλ₯Ό λ°ννλ€.
forEach, map, filter λ©μλμ λ§μ°¬κ°μ§λ‘ some λ©μλμ μ½λ°± ν¨μλ some λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, filter λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μκ³ , νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€.
// λ°°μ΄μ μμ μ€μ 10λ³΄λ€ ν° μμκ° 1κ° μ΄μ μ‘΄μ¬νλμ§ νμΈ
[5, 10, 15].some(item => item > 10); // -> true
// λ°°μ΄μ μμ μ€μ 0λ³΄λ€ μμ μμκ° 1κ° μ΄μ μ‘΄μ¬νλμ§ νμΈ
[5, 10, 15].some(item => item < 0); // -> false
// λ°°μ΄μ μμ μ€μ 'banana'κ° 1κ° μ΄μ μ‘΄μ¬νλμ§ νμΈ
['apple', 'banana', 'mango'].some(item => item === 'banana'); // -> true
// some λ©μλλ₯Ό νΈμΆν λ°°μ΄μ΄ λΉ λ°°μ΄μΈ κ²½μ° μΈμ λ falseλ₯Ό λ°ννλ€.
[].some(item => item > 3); // -> false
every λ©μλλ μμ μ νΈμΆν λ°°μ΄μ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ μ½λ°± ν¨μλ₯Ό νΈμΆνλ€. μ΄λ every λ©μλλ μ½λ°± ν¨μμ λ°νκ°μ΄ λͺ¨λ μ°Έμ΄λ©΄ true, λ¨ νλ²μ΄λΌλ κ±°μ§μ΄λ©΄ falseλ₯Ό λ°ννλ€.
forEach, map, filter λ©μλμ λ§μ°¬κ°μ§λ‘ every λ©μλμ μ½λ°± ν¨μλ every λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, filter λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μκ³ , νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€.
// λ°°μ΄μ λͺ¨λ μμκ° 3λ³΄λ€ ν°μ§ νμΈ
[5, 10, 15].every(item => item > 3); // -> true
// λ°°μ΄μ λͺ¨λ μμκ° 10λ³΄λ€ ν°μ§ νμΈ
[5, 10, 15].every(item => item > 10); // -> false
// every λ©μλλ₯Ό νΈμΆν λ°°μ΄μ΄ λΉ λ°°μ΄μΈ κ²½μ° μΈμ λ trueλ₯Ό λ°ννλ€.
[].every(item => item > 3); // -> true
find λ©μλλ μμ μ νΈμΆν λ°°μ΄μ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ μ½λ°± ν¨μλ₯Ό νΈμΆνμ¬ μ²« λ²μ§Έ μμλ₯Ό λ°ννλ€. μ½λ°± ν¨μμ λ°νκ°μ΄ true μΈ μμκ° μ‘΄μ¬νμ§ μλλ€λ©΄ undefinedλ₯Ό λ°ννλ€.
forEach, map, filter λ©μλμ λ§μ°¬κ°μ§λ‘ find λ©μλμ μ½λ°± ν¨μλ find λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, find λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μκ³ , νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€.
const users = [
{ id: 1, name: 'Lee' },
{ id: 2, name: 'Kim' },
{ id: 2, name: 'Choi' },
{ id: 3, name: 'Park' }
];
// idκ° 2μΈ μ²« λ²μ§Έ μμλ₯Ό λ°ννλ€. find λ©μλλ **λ°°μ΄μ΄ μλλΌ μμλ₯Ό λ°ν**νλ€.
users.find(user => user.id === 2); // -> {id: 2, name: 'Kim'}
// Array#filterλ λ°°μ΄μ λ°ννλ€.
[1, 2, 2, 3].filter(item => item === 2); // -> [2, 2]
// Array#findλ μμλ₯Ό λ°ννλ€.
[1, 2, 2, 3].find(item => item === 2); // -> 2
findIndex λ©μλλ μμ μ νΈμΆν λ°°μ΄μ μμλ₯Ό μννλ©΄μ μΈμλ‘ μ λ¬λ μ½λ°± ν¨μλ₯Ό νΈμΆνμ¬ λ°νκ°μ΄ trueμΈ μ²« λ²μ§Έ μμμ μΈλ±μ€λ₯Ό λ°ννλ€. μ½λ°± ν¨μμ λ°νκ°μ΄ trueμΈ μμκ° μ‘΄μ¬νμ§ μλλ€λ©΄ -1μ λ°ννλ€.
forEach, map, filter λ©μλμ λ§μ°¬κ°μ§λ‘ findIndex λ©μλμ μ½λ°± ν¨μλ findIndex λ©μλλ₯Ό νΈμΆν λ°°μ΄μ μμκ°κ³Ό μΈλ±μ€, findIndex λ©μλλ₯Ό νΈμΆν λ°°μ΄ μ체, μ¦ thisλ₯Ό μμ°¨μ μΌλ‘ μ λ¬λ°μ μ μκ³ , νμ΄ν ν¨μλ₯Ό μ¬μ©ν΄ thisλ‘ μ¬μ©ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€.
const users = [
{ id: 1, name: 'Lee' },
{ id: 2, name: 'Kim' },
{ id: 2, name: 'Choi' },
{ id: 3, name: 'Park' }
];
// idκ° 2μΈ μμμ μΈλ±μ€λ₯Ό ꡬνλ€.
users.findIndex(user => user.id === 2); // -> 1
// nameμ΄ 'Park'μΈ μμμ μΈλ±μ€λ₯Ό ꡬνλ€.
users.findIndex(user => user.name === 'Park'); // -> 3
// μμ κ°μ΄ νλ‘νΌν° ν€μ νλ‘νΌν° κ°μΌλ‘ μμμ μΈλ±μ€λ₯Ό ꡬνλ κ²½μ°
// λ€μκ³Ό κ°μ΄ μ½λ°± ν¨μλ₯Ό μΆμνν μ μλ€.
function predicate(key, value) {
// keyμ valueλ₯Ό κΈ°μ΅νλ ν΄λ‘μ λ₯Ό λ°ν
return item => item[key] === value;
}
// idκ° 2μΈ μμμ μΈλ±μ€λ₯Ό ꡬνλ€.
users.findIndex(predicate('id', 2)); // -> 1
// nameμ΄ 'Park'μΈ μμμ μΈλ±μ€λ₯Ό ꡬνλ€.
users.findIndex(predicate('name', 'Park')); // -> 3
flatMap λ©μλλ map λ©μλλ₯Ό ν΅ν΄ μμ±λ μλ‘μ΄ λ°°μ΄μ ννννλ€. μ¦ map λ©μλμ flat λ©μλλ₯Ό μμ°¨μ μΌλ‘ μ€ννλ ν¨κ³Όκ° μλ€. λ¨ 1λ¨κ³λ§ νννν μ μλ€.
const arr = ['hello', 'world'];
// mapκ³Ό flatμ μμ°¨μ μΌλ‘ μ€ν
arr.map(x => x.split('')).flat();
// -> ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
// flatMapμ mapμ ν΅ν΄ μμ±λ μλ‘μ΄ λ°°μ΄μ ννννλ€.
arr.flatMap(x => x.split(''));
// -> ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
const arr = ['hello', 'world'];
// flatMapμ 1λ¨κ³λ§ ννννλ€.
arr.flatMap((str, index) => [index, [str, str.length]]);
// -> [[0, ['hello', 5]], [1, ['world', 5]]] => [0, ['hello', 5], 1, ['world', 5]]
// ννν κΉμ΄λ₯Ό μ§μ ν΄μΌ νλ©΄ flatMap λ©μλλ₯Ό μ¬μ©νμ§ λ§κ³ map λ©μλμ flat λ©μλλ₯Ό κ°κ° νΈμΆνλ€.
arr.map((str, index) => [index, [str, str.length]]).flat(2);
// -> [[0, ['hello', 5]], [1, ['world', 5]]] => [0, 'hello', 5, 1, 'world', 5