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;
}
Конечно закос под PHP это хорошо и привычно, но у JS немного другая логика. поэтому советую свой вариант функции в "стиле JS":
Пример:
true
На первый взгляд вариант хорош, но как оказалось лучше пользоваться первым вариантом. Так как если вам нужны будут не только нумерованные массивы то:
а мне нравится так
Такой вариант нормально обработается?
Потому что нужно добавить проверку через hasOwnProperty:
Никогда не добавляйте кастомные методы в базовые типы, особенно - на проектах, где будут работать другие люди.
Вынуждать в каждом переборе массива делать проверку на typeof(stuff) !== 'function' - это кошмар.
если хотите сделать так как свойственно для javascript-a, то нужно, сделать по другому:
value.in_array(array);
а не наоборот
Ещё есть аналогичная функция в JQuery - inArray, НО у меня эта функция почему-то работала с ошибкой, так что пришлось писать на JS свою.
Скорее всего у тебя не работало, потому что ты не учел того, что возвращается не false, a -1
Видио, потому что вы не учли, что функция $.inArray() возвращает не true/false, а ключ массива в котором найден элемент или -1 если его нет
Полность согласен с Android, очень удобно получается. Таким образом можно и сделать свою функцию each например:
Применяя сразу к каждому элементу массива свою функцию
Какой же маразм js. Надстройка над надстройкой, надстройкой погоняет. никакой красоты, одни выкрутасы.
Никогда не писал на форумах, но тут просто не мог не написать.
Больше чем согласен. Для меня, 35 лет занимающимся программированием, начиная с Algol, Fortran и Paskal, от такого валюнтаризма худо становиться.
Мне кажется , что чем менее строг язык, тем больше места для ошибок.
Наверно, я уже слишком стар и пора завязывать.
мы прототипизировали, прототипизировали, да не выпрототипизировали.
а потом функционал пропадает...
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
}
var a = [1,2,3,4,5,6,7,8,9];
var isSixInArray = a.filter(function(item){return item==6}).length ? true : false;
С ECMAScript 2016 для этих целей появилась появилась функция Array.prototype.includes() https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Ob...
Roksa andrychów
Roksa morawica
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.