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( ... )
