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);

Автор: Гость (не зарегистрирован), дата: 8 февраля, 2018 - 21:24
#permalink

Никогда не добавляйте кастомные методы в базовые типы, особенно - на проектах, где будут работать другие люди.
Вынуждать в каждом переборе массива делать проверку на typeof(stuff) !== 'function' - это кошмар.


Автор: 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

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


Автор: Гость (не зарегистрирован), дата: 27 мая, 2021 - 16:48
#permalink

С ECMAScript 2016 для этих целей появилась появилась функция Array.prototype.includes() https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Ob...


 
Поиск по сайту
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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