Funkcja Array.from ma w sobie więcej ciekawych zastosowań, niż się to na pierwszy rzut oka wydaje. Do dzieła.

Ok, prosta zamiana tablicopodobnego (w sumie napisu) na tablicę:

console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]

Teraz zamiana z funkcją map, takie list comprehension w JS:

console.log(Array.from([1, 2, 3], (x) => x + x));
// Expected output: Array [2, 4, 6]

Ok, wrzućmy obiekt tablicopodobny w Array.from:

console.log(Array.from({length: 2, 0: "a", 1: "b"}))
//["a", "b"]

Teraz dodajmy funkcję map, ale zabierzmy z tablicopodobnego wszystko poza długością:

Array.from({length: 3}, (v, i) => console.log(v, i));

// undefined 0 
// undefined 1 
// undefined 2

Wykonał się 3 razy, wartość to undefined. Jest tam undefined i jako że zwracamy zostaje tam undefined…

Ok, zwróćmy coś:

let arr321 = Array.from({length: 3}, (v, i) => 42);
console.log(arr321);
//[ 42, 42, 42 ]

Po co się takich „głupot” uczymy? Choćby po coś takiego:

const chunk = (arr, size) =>
    Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
      arr.slice(i * size, i * size + size)
    );
  
console.log(chunk([1, 2, 3, 4, 5], 2)); 
// [[1, 2], [3, 4], [5]]

Mamy tutaj 3 elementy:

  • pierwszy to arr.slice(0,2)
  • drugi to arr.slice(2,4)
  • trzeci to arr.slice(4,6)

Kod z internetu i o dziwo bardzo elegancki. Dla takich kodów warto znać dobrze język, którego się używa.