Javascript.RU

PHP-функция: in_array

Javascript:

function in_array(needle, haystack, strict) {	// Checks if a value exists in an array
	// 
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)

	var found = false, key, strict = !!strict;

	for (key in haystack) {
		if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
			found = true;
			break;
		}
	}

	return found;
}

Примеры:

in_array('van', ['Kevin', 'van', 'Zonneveld']);
true


Автор: Android (не зарегистрирован), дата: 17 декабря, 2009 - 16:09
#permalink

Конечно закос под PHP это хорошо и привычно, но у JS немного другая логика. поэтому советую свой вариант функции в "стиле JS":

Array.prototype.in_array = function(p_val) {
	for(var i = 0, l = this.length; i < l; i++)	{
		if(this[i] == p_val) {
			return true;
		}
	}
	return false;
}

Пример:

var a = ['Kevin', 'van', 'Zonneveld'];
a.in_array('van');

true


Автор: Гость (не зарегистрирован), дата: 25 июля, 2011 - 15:28
#permalink

На первый взгляд вариант хорош, но как оказалось лучше пользоваться первым вариантом. Так как если вам нужны будут не только нумерованные массивы то:

var a = ['Kevin', 'van', 'Zonneveld'];
a.in_array('van');

true

for( key in a ) {
alert( key )
}

0
1
2
in_array

Автор: vls, дата: 11 ноября, 2011 - 14:17
#permalink

а мне нравится так

if (arr.join(',').indexOf(str)>=0) {}

Автор: bret, дата: 25 января, 2012 - 21:00
#permalink

Такой вариант нормально обработается?

arr = ['one', 'two'];
str = 'on';

Автор: SoRx, дата: 27 декабря, 2011 - 16:23
#permalink

Потому что нужно добавить проверку через hasOwnProperty:

for ( var key in a ) if ( a.hasOwnProperty(key) )
    alert(key);

Автор: BaBaKa, дата: 23 ноября, 2014 - 00:45
#permalink

если хотите сделать так как свойственно для javascript-a, то нужно, сделать по другому:

value.in_array(array);

а не наоборот


Автор: kc (не зарегистрирован), дата: 17 июля, 2010 - 15:42
#permalink

Ещё есть аналогичная функция в JQuery - inArray, НО у меня эта функция почему-то работала с ошибкой, так что пришлось писать на JS свою.

for(i=0, c=arr.length; i

Автор: djanym (не зарегистрирован), дата: 24 марта, 2011 - 00:10
#permalink

Скорее всего у тебя не работало, потому что ты не учел того, что возвращается не false, a -1


Автор: alex bobroff (не зарегистрирован), дата: 19 сентября, 2011 - 13:04
#permalink

Видио, потому что вы не учли, что функция $.inArray() возвращает не true/false, а ключ массива в котором найден элемент или -1 если его нет


Автор: B@RM@LEY (не зарегистрирован), дата: 9 марта, 2011 - 16:53
#permalink

Полность согласен с Android, очень удобно получается. Таким образом можно и сделать свою функцию each например:

Array.prototype.each = function(func) {
	for(var i = 0, l = this.length; i < l; i++)  {
		func(this[i]);
	}
};

Применяя сразу к каждому элементу массива свою функцию


Автор: Гость (не зарегистрирован), дата: 4 мая, 2011 - 01:22
#permalink

Какой же маразм js. Надстройка над надстройкой, надстройкой погоняет. никакой красоты, одни выкрутасы.


Автор: mic_sot (не зарегистрирован), дата: 16 апреля, 2013 - 15:03
#permalink

Никогда не писал на форумах, но тут просто не мог не написать.
Больше чем согласен. Для меня, 35 лет занимающимся программированием, начиная с Algol, Fortran и Paskal, от такого валюнтаризма худо становиться.
Мне кажется , что чем менее строг язык, тем больше места для ошибок.
Наверно, я уже слишком стар и пора завязывать.


Автор: Гость (не зарегистрирован), дата: 3 ноября, 2011 - 17:15
#permalink

мы прототипизировали, прототипизировали, да не выпрототипизировали.
а потом функционал пропадает...


Автор: Гость (не зарегистрирован), дата: 23 мая, 2012 - 18:43
#permalink

inArray = Array.prototype.indexOf ?
function (arr, val) {
return arr.indexOf(val) != -1
} :
function (arr, val) {
var i = arr.length
while (i--) {
if (a[i] === val) return true
}
return false
}


Автор: Yarax (не зарегистрирован), дата: 24 мая, 2013 - 13:13
#permalink

var a = [1,2,3,4,5,6,7,8,9];

var isSixInArray = a.filter(function(item){return item==6}).length ? true : false;


Автор: Stegantsev (не зарегистрирован), дата: 3 июля, 2013 - 15:52
#permalink
function in_array(what, where) {
    for(var i=0; i<where.length; i++)
        if(what == where[i])
            return true;
    return false;
}

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
6 + 4 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum