Array.from()μΌλ‘ μ°μλ μλ‘ κ΅¬μ±λ λ°°μ΄ [1, 2, 3, 4, 5] λ§λλ κ³Όμ μμ보기
- August 19, 2019
- 3 minute read
Array.from λ©μλλ μ μ¬ λ°°μ΄ κ°μ²΄(array-like object)λ λ°λ³΅ κ°λ₯ν κ°μ²΄(iterable object)λ₯Ό μκ² λ³΅μ¬ν΄ μλ‘μ΄ Array κ°μ²΄λ₯Ό λ§λλλ€.
- Array.from(arrayLike[, mapFn[, thisArg]])
- λ°ν κ°: μλ‘μ΄ Array μΈμ€ν΄μ€.
- λ²μ : ECMAScript 2015 (ES 6, ECMA-262)
- MDN: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/from
μ΄ λ©μλλ μ΄λ¦μμλ μ μΆν΄λ³Ό μ μλ€μνΌ μ΄λ€ λ°μ΄ν°λ‘ λΆν° λ°°μ΄μ μμ±ν©λλ€.
MDNμ λμμλ μμλ‘, λ¬Έμμ΄μ λ¬Έμ λ¨μλ‘ μͺΌκ°μ΄ λ°°μ΄λ‘ λ§λ€κ±°λ, μκ·λ¨ΌνΈλ₯Ό λ°°μ΄λ‘ λ§λ€ μ μμ΅λλ€.
Array.from('foo')); // -> [βfβ, βoβ, βoβ]
function f() {
return Array.from(arguments);
}
f(1, 2, 3); // -> [1, 2, 3]
κ·Έλ¦¬κ³ νΉμ κΈΈμ΄μ λ°°μ΄μ λ§λ€μ΄ μ°μλ μλ₯Ό λ£μ μλ μμ΅λλ€. (μ°Έκ³ )
μλ μ½λμμ length κΈΈμ΄μ, λ°°μ΄μ κ°μ΄ λλ iμ μλ₯Ό λνκ±°λ λΉΌμ£Όλ©΄ λ΄κ° μνλ λ²μμ μ°μλ μλ‘ μ΄λ€μ§ λ°°μ΄μ΄ λ§λ€μ΄μ§λλ€.
Array.from({length: 5}, (v, i) => i); // [0, 1, 2, 3, 4]
Array.from({length: 7}, (v, i) => i-3); // [-3, -2, -1, 0, 1, 2, 3]
μ΄λ»κ² μ΄λ° λ°°μ΄μ΄ λμ¬ μ μμκΉμ? λ©μλκ° μ΄λ»κ² λμνλ μ§ μμλ³΄κ² μ΅λλ€.
첫 μ§Έλ‘, {length: x}λ x κΈΈμ΄μ μ μ¬ λ°°μ΄ κ°μ²΄λ₯Ό μμ±ν©λλ€.
μ½μμμ μΌλ° λ°°μ΄μ κ°μ μ΄μ΄λ³΄λ©΄ μΈλ±μ€
μ κ°
, length
μμ±μ νμΈν μ μλλ°μ, μ΄ κ΅¬μ±μΌλ‘ κ°μ²΄λ₯Ό λ§λ κ²μ΄ μ μ¬ λ°°μ΄ κ°μ²΄μ
λλ€.
λ°°μ΄μ²λΌ obj[0]
, obj[1]
, obj.length
μ κ°μ μ°Έμ‘°κ° κ°λ₯νμ§λ§, λ°°μ΄μ΄ μλ κ°μ²΄λΌλ κ²λλ€.
κ·Έλ¦¬κ³ μ΄ μ μ¬ λ°°μ΄ κ°μ²΄μ length
κ°λ§ μ
λ ₯ν΄μ£ΌμμΌλ, Array.from
λ©μλκ° κ°μ undefined
λ‘ μ±μμ§ λ°°μ΄μ λ°νν΄μ€λλ€.
νμ§λ§ μ°λ¦¬κ° λ§λ€κ³ μ νλ κ²μ μ°μλ μλ‘ μ΄λ£¨μ΄μ§, μ¦ μΈλ±μ€(0~4) κ°μ΄ μ±μμ§ λ°°μ΄μ λλ€.
μ¬κΈ°μ mdn λ΄μ© μ€μ μ£Όμ κΉκ² λ΄μΌνλ λΆλΆμ΄ μμ΅λλ€.
Array.from()
μ μ ν 맀κ°λ³μμΈ mapFnλ₯Ό κ°μ§λλ°, λ°°μ΄(νΉμ λ°°μ΄ μλΈν΄λμ€)μ κ° μμλ₯Ό 맡νν λ μ¬μ©ν μ μμ΅λλ€. μ¦,Array.from(obj, mapFn, thisArg)
λ μ€κ°μ λ€λ₯Έ λ°°μ΄μ μμ±νμ§ μλλ€λ μ μ μ μΈνλ©΄Array.from(obj).map(mapFn, thisArg)
μ κ°μ΅λλ€. μ΄ νΉμ§μ typed arraysμ κ°μ νΉμ λ°°μ΄ μλΈν΄λμ€μμ μ€κ° λ°°μ΄ κ°μ΄ μ μ ν μ νμ λ§κ² μλ΅λκΈ° λλ¬Έμ νΉν μ€μν©λλ€.
μ€λͺ
κ³Ό κ°μ΄ map
λ©μλκ° μ°κ²°λ κ΅¬μ‘°λ‘ μ΄ν΄ν΄ λ΄
μλ€.
map
λ©μλλ 첫 λ²μ§Έ 맀κ°λ³μ(currentValue)λ‘ κ°μ, λ λ²μ§Έ 맀κ°λ³μ(index)λ‘ μΈλ±μ€λ₯Ό μ°Έμ‘°ν μ μμ΅λλ€.
arr.map(callback(currentValue[, index[, array]])[, thisArg])
κ·Έλ¬λ―λ‘ Array.from
λ©μλμμλ μΈλ±μ€λ₯Ό μ°Έμ‘°νλ €λ©΄ λ κ°μ 맀κ°λ³μκ° νμν©λλ€.
κ·Έλ¦¬κ³ μΈλ±μ€λ₯Ό μ°Έμ‘°νλ 맀κ°λ³μλ₯Ό μλ‘μ΄ λ°°μ΄μ κ°μΌλ‘ λ°νν΄μ£ΌμΈμ.
λ§λ€κ³ μ νλ λ°°μ΄μ λ³Ό μ μμ΅λλ€!
Array.from({length: 5}, x => x); // κ°λ§ 맀κ°λ³μλ‘ λ°μ => μλ‘μ΄ λ°°μ΄μ κ°μ κΈ°μ‘΄ λ°°μ΄μ κ°
Array.from({length: 5}, (value, index) => index); // κ°κ³Ό μΈλ±μ€λ₯Ό 맀κ°λ³μλ‘ λ°μ => μλ‘μ΄ λ°°μ΄μ κ°μ κΈ°μ‘΄ λ°°μ΄μ μΈλ±μ€
νμ΄ν ν¨μκ° μ΅μμΉ μμ λΆλ€μ μν κΈ°λ³Έ ν¨μ ννλ² μμμ λλ€.
Array.from({length: 5}, function(value, index){
return index;
});
μ΄ν΄κ° λμ ¨λ€λ©΄ μ’κ² λ€μ!π
μ½λμ€ν μ΄μΈ μμ μκ³ λ¦¬μ¦ ν΄μ¦λ₯Ό μ¬λ¬κ°μ§ λ°©λ²μΌλ‘ νμ΄λ³΄λ€κ° Array.from λ©μλλ₯Ό μ¨λ³΄κ² λμλλ°, μ΄λ€ μλ¦¬λ‘ κ°μ΄ λ§λ€μ΄μ§λμ§ μ½λλ§ λ΄μλ μ΄ν΄κ° μλμ΄μ ν¬μ€ν μ μμ±νκ² λμμ΅λλ€.
μλ μ€νμ€λ²νλ‘μ°μ κΈκ³Ό mdnμ μ°Έκ³ νμ΅λλ€.
https://stackoverflow.com/questions/40528557/how-does-array-fromlength-5-v-i-i-work