Функция find для поиска в массиве
Итак, здравствуйте =)
Мне нужно создать функцию find (arr, value), которая ищет в массиве arr значение value и возвращает его номер, если найдено, или -1, если не найдено. Вот что получилось (без вывода -1, если не найдено): var massive = [2, 'crack', 'find', 2] ; var mass = [5, 'al', 1] ; var b = function(arr, value) { for (var i = 0; i < arr.length; i++) { if (value == arr[i]) {alert(i)} else if (value !== arr[i]) {continue} } ; } ; b(massive, 2) ; // 0, 3 b(mass, 'al') ; // 1 b(mass, 2) ; // b(massive, 'al') ; // Вот, всё норм, выводит номер, если значение есть. Но у меня никак не получается сделать, чтобы, если значение не найдено, выводило -1, уже несколько способов перепробовал, результат - нулевой, либо выводит -1 после каждого вызова функции =( помогите, плиз |
Else не нужно. При нахождении соответствия ставь еще флаг. По окончанию цикла - если флаг не установлен значит алерт -1
|
простите, дмитрий, else я сделал, т.к. я там мудрил с этим -1, и убрать забыл...а что такое "флаг" я не знаю...объясните, плиз =)
|
Флаг - просто любая переменная принимал щадя опр значение при выполнении условия
|
<script type="text/javascript"> var Arr_1 = [2, 'crack', 'find', 2]; function Find_El_Array ( arr, val ) { for(var i in arr) {if (val == arr[i]) return i; } return false; } alert( Find_El_Array (Arr_1, 2) ) alert( Find_El_Array (Arr_1, 1) ) </script> Дубово - но стандартно Hekumok, Ксать - Вопрос - если в массива два совпадения ? |
дмитрий, а, ну я так и делал, но у меня там выводило -1 после каждого вызова функции! Может, я просто что-то не так делал...если нетрудно, можно скрипт?
|
Hekumok,
:) Мой не подошел ? (там false вместо -1 -1 может быть в массиве - если нет поменяйте false на -1 |
Deff, если в массиве 2 совпадения, то нужно чтобы выводило номер каждого!
И Ваш скрипт хорош =) но мне нужно, чтобы если совпадений нет, то выводило -1 |
Deff, спасибо, попробую =)
|
Hekumok,
Т.е на выходе должен быть массив ? |
Hekumok,
<script type="text/javascript"> var Arr_1 = [2, 'crack', 'find', 2]; function Find_El_Array ( arr, val ) { var array_OUT = []; for(var i in arr) {if (val == arr[i]) array_OUT.push(i);} if(array_OUT.length) return array_OUT; return -1; } alert( Find_El_Array (Arr_1, 2) ) alert( Find_El_Array (Arr_1, 1) ) </script> |
Deff, попробовал ваш скрипт, вставив -1 вместо false, вывело почему-то три нуля:
var massive = [2, 'crack', 'find', 2] ; var mass = [5, 'al', 1] ; function find(arr, val) { for (var i in arr) { if (value = arr[i]) return i ;} return -1 ; } ; alert(find(massive, 2)) ; alert(find(mass, 'al')) ; alert(find(mass, 2)) ; alert(find(massive, 'al')) ; |
Deff, нет, на выходе массив не нужен...нужно просто, чтобы через alert вывело номер значение, если есть совпадение, если 2 совпадения, то должно быть 2 алерта с номерами, а если нет совпадений, то должно вывести -1
|
Hekumok,
Три 0 занчит три элемента первых в списке - Первый элемент 0 -номер массивы начинаются с 0 |
Цитата:
к примеру 1, 2, 3 (Совпали ---------------------- можно сделать строку цифр через запятую, но тогда вам придется цифры вычленять из строки в так перебираете массив ответных совпадений в цикле |
Deff, да я знаю, что с нуля элементы начинаются, но с такими массивами
var massive = [2, 'crack', 'find', 2] ; var mass = [5, 'al', 1] ; должно было вывести alert(find(massive, 2)) ; // 0, 3 alert(find(mass, 'al')) ; // 1 alert(find(mass, 2)) ; // -1 alert(find(massive, 'al')) ; // -1 |
Hekumok,
Первый код был расчитан на одно совпадение(У Всех) - подставляйте во второй Короткие имена типа Find - лучше не делать - подобные операторы часто есть в библиотеках |
Deff, лучше бы конечно, чтобы через "алерт" выводило каждое совпадение, но можно и как вы предложили с новым массивом
|
Цитата:
|
Hekumok,
Пост 12 |
Maxmaxmахimus,
Код - прекрасен! (*но кому в первом классе дают интегральное исчисление - Челу нужен базис и последовательность методов |
Deff, сделал по 12 посту, вабще ничего не выводит =(
var massive = [2, 'crack', 'find', 2] ; var mass = [5, 'al', 1] ; function find_elem(arr, val) { var end = [ ] ; for (var i in arr) { if (value == arr[i]) end.push(i) ; } ; if (end.length) return end ; return -1 ; } ; alert(find_elem(massive, 2)) ; alert(find_elem(mass, 'al')) ; alert(find_elem(mass, 2)) ; alert(find_elem(massive, 'al')) ; |
maxmaxmaximus, чё-та я половину не понимаю в вашем скрипте
|
Цитата:
|
Maxmaxmaximus, спасибо, что объяснили, я понял =)
Цитата:
|
Цитата:
|
Maxmaxmaximus, а что такое "Array.prototype.find"?
|
Hekumok, Просто не нун переименовывать Всё и всё сразу - стандартная метода:
1. Смотрим Как есть 2. Меняем Одну переменную -смотрим 3. Добавляем Свои параметры function find_elem(arr, value) { var end = []; for (var i in arr) { if (value == arr[i]) end.push(i) } if (end.length) return end ; return -1 ; } var massive = [2, 'crack', 'find', 2] ; var mass = [5, 'al', 1] ; alert("find_elem(mass, 'al') : "+find_elem(mass, 'al')) ; alert("find_elem(mass, '2') : "+find_elem(mass, 2)) ; alert("find_elem(massive, 'al') : "+find_elem(massive, 'al')) ; alert("find_elem(massive, '2') : "+find_elem(massive, 2)) ; |
deff, спасибо, понял, в чём у меня была ошибка в скрипте по 12посту, я вместо val написал value, теперь всё правильно выводит =)
|
deff, спасибо, но у меня уже всё получилось =)
|
и снова здравствуйте =)
Неохота создавать новую тему, поэтому я напишу в этой...в общем, вот скрипт: var massive = [2, 'crack', 3, 6, 'find', 2] ; var end = [ ] ; function filter(arr, min, max) { for (var key in arr) { function isNumeric( ) { if (!isNaN (parseFloat(arr[key])) && isFinite(arr[key])) {if (arr[key] >= min && arr[key] <= max) end.push(arr[key]) } ; } ; isNumeric( ) ; } } ; filter(massive, 0, 5); alert (end) ; // 2,3,2 Здесь всё правильно, но у меня не получается сделать так, чтобы элементы сохранялись не в переменную end, a в переменную, вызвавшую функцию? Bom пример: var filter_end = filter(massive, 0, 5) ; // теперь filter_end = [2, 3, 2] alert (filter_end) ; // 2,3,2 |
function filter( arr, min, max ) { var end = []; for ( var key in arr ) { if ( !isNaN( parseFloat( arr[ key ] ) ) && isFinite( arr[ key ] ) ) { if ( arr[ key ] >= min && arr[ key ] <= max ) { end.push( arr[ key ] ) } } } return end; } var massive = [2, 'crack', 3, 6, 'find', 2]; var filter_end = filter( massive, 0, 5 ); alert( filter_end ) ; // 2,3,2 |
devote, спасибо, что-то я тупанул =)
|
итак, это снова я =)
Мне нужно создать функцию filter(arr, func), которая получает массив arr и возвращает новый, в который входят только те элементы arr, для которых func возвращает true. Вот такой у мя получился скрипт, но у меня почему-то получается, что func всегда возвращает true, даже если, как в примере ниже, указать, чтобы она возвращала false. function filter(arr, func) { for (var key in arr) { function isNumeric( ) { if (!isNaN (parseFloat(arr[key])) && isFinite(arr[key])) {if (func = true) end.push(arr[key])} ; } ; isNumeric( ) ; } ; return end ; } ; var end = [ ] ; var massive = [1, 'endof', 'trial', 5, 1, 3, 'call', 7] ; var proba = filter(massive, function() {return false }) ; alert (proba) ; // 1,5,1,3,7 , хотя должно быть пусто! |
func = true нужно func == true |
я так уже пробовал, выводит пустое окно:
function filter(arr, func) { for (var key in arr) { function isNumeric( ) { if (!isNaN (parseFloat(arr[key])) && isFinite(arr[key])) {if (func == true) end.push(arr[key])} ; } ; isNumeric( ) ; } ; return end ; } ; var end = [ ] ; var massive = [1, 'endof', 'trial', 5, 1, 3, 'call', 7] ; var proba = filter(massive, function() {return true }) ; alert (proba) ; // пусто, а должно '1,5,1,3,7' |
func() == true |
спасибо, получилось, но теперь не пойму, как сделать, чтобы при
var arr = [1, 'endof', 'trial', 5, 1, 3, 'call', 7] ; var res = filter(arr, function(a) {return a >= 3 && a <= 5 ;}) ; alert (res) ; был результат 5, 3 |
Maxmaxmaximus, но мне нужно чтобы именно через var res = filter(arr, function() {...}) , a не var res = arr.filter(function() {...}) !
|
Hekumok,
:yes: Эт не Важно как - поставь свою переменную Maxmaxmахimus Гы, чувствую себя неловко, с равной кармой |
Часовой пояс GMT +3, время: 17:21. |