Array#some(),
Array#every(),
Array#forEach() и куча других.
Они используют внутри себя цикл, но:
— проходят только по тем элементам, для которых были определены индексы (как и
for in)
— не проверяют пользовательские свойства (для чего в
for in пришлось бы проверять на
hasOwnProperty + на соответствие свойства типу
Number)
Так что, при прочих равных, лучше использовать их.
Удаляем первое вхождение
Альтернатива разумному способу, предложенному
localghost, — поиск с помощью
Array#indexOf()removeOne(17, [3, 5, 17, 8, 17, 34, 5]);
function removeOne (value, array) {
array.some(function (_value, index, _array) {
if (_value == 17) {
_array.splice(index, 1);
return true;
}
}, array);
console.log(array);
}
Удаляем каждое вхождениеremoveAll(17, [3, 5, 17, 8, 17, 34, 5]);
function removeAll (value, array) {
array.forEach(function (_value, index, _array) {
if (_value == 17) {
_array.splice(index, 1);
}
}, array);
console.log(array);
}
Создаём новый массив с уникальными элементами (или заменяем текущий)
makeUnique([3, 5, 17, 8, 17, 34, 5]);
function makeUnique (array) {
var newArray = [];
array.forEach(function (_value, index) {
if (newArray.indexOf(_value) < 0) {
newArray.push(_value);
}
});
array = newArray; // По необходимости
console.log(newArray);
}