ÐÑÑавиÑÑ ÑникалÑнÑе ÑлеменÑÑ Ð¼Ð°ÑÑива
ÐÑÑÑÑ arr â маÑÑив ÑÑÑок.
ÐапиÑиÑе ÑÑнкÑÐ¸Ñ unique(arr), коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив, ÑодеÑжаÑий ÑолÑко ÑникалÑнÑе ÑлеменÑÑ arr.
ÐапÑимеÑ:
function unique(arr) {
/* Ð²Ð°Ñ ÐºÐ¾Ð´ */
}
let strings = ["кÑиÑна", "кÑиÑна", "Ñ
аÑе", "Ñ
аÑе",
"Ñ
аÑе", "Ñ
аÑе", "кÑиÑна", "кÑиÑна", ":-O"
];
alert( unique(strings) ); // кÑиÑна, Ñ
аÑе, :-O
ÐÑкÑÑÑÑ Ð¿ÐµÑоÑниÑÑ Ñ ÑеÑÑами Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ñи.
ÐавайÑе пÑойдÑмÑÑ Ð¿Ð¾ ÑлеменÑам маÑÑива:
- ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа Ð¼Ñ Ð¿ÑовеÑим, еÑÑÑ Ð»Ð¸ он в маÑÑиве Ñ ÑезÑлÑÑаÑом.
- ÐÑли еÑÑÑ, Ñо игноÑиÑÑем его, а еÑли Ð½ÐµÑ â добавлÑем к ÑезÑлÑÑаÑам.
function unique(arr) {
let result = [];
for (let str of arr) {
if (!result.includes(str)) {
result.push(str);
}
}
return result;
}
let strings = ["кÑиÑна", "кÑиÑна", "Ñ
аÑе", "Ñ
аÑе",
"Ñ
аÑе", "Ñ
аÑе", "кÑиÑна", "кÑиÑна", ":-O"
];
alert( unique(strings) ); // кÑиÑна, Ñ
аÑе, :-O
Ðод ÑабоÑаеÑ, но в нÑм еÑÑÑ Ð¿Ð¾ÑенÑиалÑÐ½Ð°Ñ Ð¿Ñоблема Ñ Ð¿ÑоизводиÑелÑноÑÑÑÑ.
ÐеÑод result.includes(str) внÑÑÑи ÑÐµÐ±Ñ Ð¾Ð±Ñ
Ð¾Ð´Ð¸Ñ Ð¼Ð°ÑÑив result и ÑÑÐ°Ð²Ð½Ð¸Ð²Ð°ÐµÑ ÐºÐ°Ð¶Ð´Ñй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñ str, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи Ñовпадение.
Таким обÑазом, еÑли result ÑодеÑÐ¶Ð¸Ñ 100 ÑлеменÑов и ни один не ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñо str, Ñогда он обойдÑÑ Ð²ÐµÑÑ result и ÑÐ´ÐµÐ»Ð°ÐµÑ Ñовно 100 ÑÑавнений. РеÑли result болÑÑой, напÑимеÑ, 10000, Ñо бÑÐ´ÐµÑ Ð¿Ñоизведено 10000 ÑÑавнений.
Само по Ñебе ÑÑо не пÑоблема, поÑÐ¾Ð¼Ñ ÑÑо движки JavaScript оÑÐµÐ½Ñ Ð±ÑÑÑÑÑе, поÑÑÐ¾Ð¼Ñ Ð¾Ð±Ñ
од 10000 ÑлеменÑов маÑÑива Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑиÑаннÑе микÑоÑекÑндÑ.
Ðо Ð¼Ñ Ð´ÐµÐ»Ð°ÐµÐ¼ ÑакÑÑ Ð¿ÑовеÑÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа arr в Ñикле for.
ÐоÑÑомÑ, еÑли arr.length Ñавен 10000, Ñ Ð½Ð°Ñ Ð±ÑÐ´ÐµÑ ÑÑо-Ñо вÑоде 10000*10000 = 100 миллионов ÑÑавнений. ÐÑо многоваÑо.
ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ Ð´Ð°Ð½Ð½Ð¾Ðµ ÑеÑение Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸Ñ ÑолÑко Ð´Ð»Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ¸Ñ Ð¼Ð°ÑÑивов.
Ðалее в главе Map и Set Ð¼Ñ Ñвидим, как его опÑимизиÑоваÑÑ.
ÐÑкÑÑÑÑ ÑеÑение Ñ ÑеÑÑами в пеÑоÑниÑе.