ÐалиÑиÑи ÑнÑкалÑÐ½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи маÑивÑ
ÐеÑ
ай 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 ми побаÑимо, Ñк його опÑимÑзÑваÑи.
ÐÑдкÑиÑи ÑÑÑÐµÐ½Ð½Ñ Ñз ÑеÑÑами в пÑÑоÑниÑÑ.