Ваше мнение важно для нас.
Поделитесь своими предоложениями и пожеланиями.

JavaScript: Как определить содержится ли значение в массиве?


Мне нужно определить есть ли в массиве значение. Я использую для этого следующую функцию:

Array.prototype.contains = function(obj) {

var i = this.length;

while (i--) {

if (this[i] == obj) {

return true;

}

}

return false;

}


Почему-то функция возвращает false, даже если элемент есть в массиве.

Вот пример:

arrValues = ["Sam","Great", "Sample", "High"]

alert(arrValues.contains("Sam"));



Посоветуйте что с этим делать?
0

Ответы

0
Ссылка
Вообще правильнее использовать ===, а не просто ==.
5
Ссылка
Почему-то функция возвращает false, даже если элемент есть в массиве.


Да нет, функция правильно работает, ошибка — где-то в другом месте.
0
Ссылка
Да, действительно заработало, ошибка была в неправильном триме(оставался лишний пробел).
0
Ссылка
A почему бы не использовать просто

arrValues.indexOf('Sam') > -1


Да, не работает в IE 8, но во-первых им уже мало кто пользуется, а во-вторых вот этот простой шим решает проблему:

if(!Array.prototype.indexOf) {

Array.prototype.indexOf = function(needle) {

for(var i = 0; i < this.length; i++) {

if(this[i] === needle) {

return i;

}

}

return -1;

};

}
0
Ссылка
В jQuery есть функция:

$.inArray(value, array)


Возвращает либо index значения в массиве, либо -1 если значения в массиве нет(по-сути не сильно отличается от indexOf, за то работает везде).

0
Ссылка
Название метода "inArray" не очень удачное. Как уже упоминалось выше, он возвращает -1 (а не false или что-то что к нему приводится) в случаи когда элемент не существует. Потому использовать его в if-выражениях нужно акуратно.
-1
Ссылка
Как по мне удобнее использовать что-то в таком духе

Array.prototype.contains = function(obj)

{

return (this.join(',')).indexOf(obj) > -1;

}


Намного понятнее и проще пользоваться:

var c=[];

var d=[];

function a()

{

var e = '1';

var f = '2';

c[0] = ['1','1'];

c[1] = ['2','2'];

c[2] = ['3','3'];

d[0] = [document.getElementById('g').value,document.getElementById('h').value];



document.getElementById('i').value = c.join(',');

document.getElementById('j').value = d.join(',');

document.getElementById('b').value = c.contains(d);

}
0
Ссылка
Проблема в том, что если в массиве не числа, а строки и они могут содержать символ "," или искомый элемент - строка и содержит символ "," могут возникнуть ошибки. Вобщем это какой-то ненадежный метод.
Для того, чтоб отвечать на вопросы или зарегистрируйтесь.
ИТ-цитата
"Я придумал термин "объектно-ориентированный", но уверяю вас, я совсем не имел в виду С++."
Алан Кей