javascript - new Array(...set) ile [...set] arasındaki fark nedir?


500k+ dizi elemanları için aşağıdaki kodu kullanıyorum ve maksimum çağrı yığını hatası alıyorum:

function getSortedUniqInts(arr) {
  const unique = new Set(arr);
  return new Array(...unique).sort((a, b) => a - b);
}

Ama bu kod hatasız çalışıyor:

function getSortedUniqInts(arr) {
  const unique = new Set(arr);
  return [...unique].sort((a, b) => a - b);
}

Bunlar arasındaki fark nedir?

Cevap #1

Fark şudur ki, birincisi bir fonksiyon çağrısına 500.000 argüman geçirmeye çalışıyor. İkinci ise bunu yapmıyor.

Belki ikinciyi bunu yapmak gibi bir şey yapıyor olarak hayal etmeliyiz:

function getSortedUniqInts(arr) {
  const unique = new Set(arr);

  //
  // First, create an array of the right size, then populate it.
  //
  const newarr= new Array(unique.size);
  let i= 0 ; for(const el of unique) { newarr[i++] = el }

  return newarr.sort((a, b) => a - b);
}

ama her iki şekilde de yapabilirsin:

return Array.from(unique).sort( ... )

İlgili makaleler