-
JavaScript λ°°μ΄ λ©μλμ μκ°λ³΅μ‘λπ FrontEnd/JavaScript 2022. 12. 14. 17:36
μμνλ©΄μ
μλ°μ€ν¬λ¦½νΈ λ°°μ΄ λ©μλμ κ΄ν μκ° λ³΅μ‘λλ₯Ό 곡λΆν©λλ€.
λ°°μ΄ λ©μλμ μκ° λ³΅μ‘λ
μκ° λ³΅μ‘λλ?
μκ° λ³΅μ‘λλ κ°λ¨νκ² λ§ν΄μ μκ³ λ¦¬μ¦μ΄ μ΄λ€ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° κ±Έλ¦¬λ μκ°μ λ§ν©λλ€.
μκ° λ³΅μ‘λ νμλ λΉ μ€ νκΈ°λ²μ μ¬μ©νμμ΅λλ€. μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ νκΈ°ν΄μ£Όλ νκΈ°λ²μ λλ€.
λ°°μ΄ λ©μλ μκ° λ³΅μ‘λ
λ°°μ΄μμ λ§μ΄ μ¬μ©νλ λ©μλλ€μ μκ° λ³΅μ‘λλ₯Ό μμ보λλ‘ νκ² μ΅λλ€.
1. push() - O(1)
λ°°μ΄ λμ μλ‘μ΄ μμλ₯Ό μΆκ°ν΄μ£Όλ λ©μλμ λλ€.
μΌμ ν O(1)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ΄ μ¦κ°νλλΌλ μκ°μ λ³νμ§ μμ΅λλ€.
const names = ['Luis','John','Jose']; names.push("Aaron"); console.log(names); // (4) ["Luis", "John", "Jose", "Aaron"]
2. pop() - O(1)
λ°°μ΄ λ μμλ₯Ό μμ ν΄μ£Όλ λ©μλμ λλ€.
μΌμ ν O(1)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ΄ μ¦κ°νλλΌλ μκ°μ λ³νμ§ μμ΅λλ€.
const names = ['Luis','John','Jose','Aaron']; console.log(names.pop()); //Aaron console.log(names); // (3) ["Luis", "John", "Jose"]
3. shift() - O(n)
λ°°μ΄μ 첫λ²μ§Έ μμλ₯Ό μμ ν΄μ£Όλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const names = ['Luis','John','Jose','Aaron']; console.log(names.shift()); // Luis console.log(names); // (3) ["John", "Jose", "Aaron"]
4. unshift() - O(n)
λ°°μ΄μ μμ λΆλΆμ νλ μ΄μμ μμλ₯Ό μΆκ°νλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const names = ['Luis','John','Jose']; console.log(names.unshift("Aaron")); // 4 console.log(names); // (4) ["Aaron", "Luis", "John", "Jose"]
5. splice() - O(n)
νΉμ μμλ₯Ό μ κ±°νκ±°λ μΆκ° λλ κ΅μ²΄νλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const months = ["Jan", "March", "April", "June"]; months.splice(1, 0, "Feb"); // inserts at index 1 console.log(months); // expected output: Array ["Jan", "Feb", "March", "April", "June"] months.splice(4, 1, "May"); // replaces 1 element at index 4 console.log(months); // expected output: Array ["Jan", "Feb", "March", "April", "May"]
6. sort() - O(n log(n))
λ°°μ΄μμλ₯Ό μ λ ¬ν΄μ£Όλ λ©μλ μ λλ€.
λ°μ΄ν°κ° λ§μμ§μλ‘ μ²λ¦¬μκ°μ΄ λ‘κ·Έ(log) λ°°λ§νΌ λ λμ΄λλ O(n log(n))μ 볡μ‘λλ₯Ό κ°μ΅λλ€. λ°μ΄ν°κ° 10λ°°λΌλ©΄, μ²λ¦¬μκ°μ μ½ 20λ°°λ₯Ό κ°λ 볡μ‘λμ λλ€.
const months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // expected output: Array ["Dec", "Feb", "Jan", "March"] const array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // expected output: Array [1, 100000, 21, 30, 4]
7. concat() - O(n)
2κ° μ΄μμ λ°°μ΄μ ν©μ³μ£Όλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const names1 = ["Luis","Jose"]; const names2 = ["John","Aaron"]; const newArray = names1.concat(names2,["Michelle"]); console.log(newArray); // (5) ["Luis", "Jose", "John", "Aaron", "Michelle"]
8. slice() - O(n)
μ΄λ€ λ°°μ΄μ μμλΆν° λκΉμ§(λμ ν¬ν¨νμ§ μμ΅λλ€) μλΌμ 볡μ¬λ³Έμ μλ‘μ΄ λ°°μ΄ κ°μ²΄λ‘ λ°ννλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant']; console.log(animals.slice(2)); // expected output: Array ["camel", "duck", "elephant"] console.log(animals.slice(2, 4)); // expected output: Array ["camel", "duck"] console.log(animals.slice(1, 5)); // expected output: Array ["bison", "camel", "duck", "elephant"] console.log(animals.slice(-2)); // expected output: Array ["duck", "elephant"] console.log(animals.slice(2, -1)); // expected output: Array ["camel", "duck"] console.log(animals.slice()); // expected output: Array ["ant", "bison", "camel", "duck", "elephant"]
9. indexOf() - O(n)
λ°°μ΄μ μ‘΄μ¬νλ μμλ₯Ό μ°Ύμμ ν΄λΉ μΈλ±μ€λ₯Ό λ°νν΄μ£Όλ λ©μλμ λλ€. μ¬λ¬κ°μΌ κ²½μ° κ°μ₯ 첫λ²μ§Έλ§, μμ κ²½μ°μ -1μ λ°νν©λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const names = ['Luis','Jose','John','Aaron']; console.log(names.indexOf("John")); // 2 console.log(names.indexOf("Michelle")); // -1
10. forEach() - O(n)
λ°°μ΄μ κ° μμμ λν΄ ν¨μλ₯Ό μννλ λ©μλ μ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const array1 = ['a', 'b', 'c']; array1.forEach(element => console.log(element)); // expected output: "a" // expected output: "b" // expected output: "c"
11. map() - O(n)
λ°°μ΄μ κ° μμμ λν΄ ν¨μλ₯Ό μννλ λ©μλ μ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const array1 = [1, 4, 9, 16]; // pass a function to map const map1 = array1.map(x => x * 2); console.log(map1); // expected output: Array [2, 8, 18, 32]
12. filter() - O(n)
μ£Όμ΄μ§ νν° μ‘°κ±΄μ ν΅κ³Όνλ λͺ¨λ μμλ₯Ό λͺ¨μ μλ‘μ΄ λ°°μ΄λ‘ λ°ννλ λ©μλ μ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"]
13. reduce() - O(n)
λ°°μ΄μ κ° μμμ λν΄ μ£Όμ΄μ§ 리λμ (reducer) ν¨μλ₯Ό μ€ννκ³ , νλμ κ²°κ³Όκ°μ λ°ννλ λ©μλμ λλ€.
μ ν볡μ‘λλΌκ³ λΆλ₯΄λ O(n)μ 볡μ‘λλ₯Ό κ°μ΅λλ€. μ λ ₯κ°μ μ¦κ°λμ λ°λΌ μκ°λ λμΌν λΉμ¨λ‘ μ¦κ°ν©λλ€.
const array1 = [1, 2, 3, 4]; // 0 + 1 + 2 + 3 + 4 const initialValue = 0; const sumWithInitial = array1.reduce( (accumulator, currentValue) => accumulator + currentValue, initialValue ); console.log(sumWithInitial); // expected output: 10
λ§λ¬΄λ¦¬νλ©°
μ΄λ κ² κ° JavaScript λ°°μ΄ λ©μλμ μκ° λ³΅μ‘λμ λν΄μ μμ보μμ΅λλ€.
μ°¨νμ λ°°μ΄ λ©μλλ₯Ό μ΄μ©ν κΈ°λ₯μ λ§λ€ λ μκ° λ³΅μ‘λλ₯Ό μκ°νλ©΄μ ꡬννλ©΄ μ’μ λ― ν©λλ€.
Reference
https://dev.to/lukocastillo/time-complexity-big-0-for-javascript-array-methods-and-examples-mlg
'π FrontEnd > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ