если вы беспокоитесь о производительности, вы можете проверить это:
function isOnce(itm,arr){
var first_match=-1;
for(var i=0,len=arr.length;i<len;i++){
if(arr[i]===itm){
first_match=i;
break;
}
}
if(first_match!=-1){
var last_match=-1;
for(i=arr.length-1;i>first_match;i--){
if(arr[i]===itm){
last_match=i;
break;
}
}
if(last_match==-1){
return true;
}
}
return false;
}
Вы заметите экономию, когда эти два пункта встретятся:
- Есть 2 или более совпадений
- Первое и последнее совпадения расположены на расстоянии как минимум 1 пробел
Другими словами, вы никогда не зацикливаетесь на элементах, которые находятся междупервый и последний матч.Таким образом, лучший сценарий будет:
arr=["a", ...(thousands of items here)... ,"a"];// you only looped 2 times!