Передача аргументом функции функцию
Добрый день всем. Не могу разобраться с следующим примером.
Есть функция в которой аргументами выступают массив и функция. Нужно написать тело функции, что бы аргументами выступали элемент массива, индекс элемента массива и сам массив. function knowName(arr, func){ //тело функции ??? } Что бы при вызове функции передавались аргументы указанные выше. Например: knowName([1,2,3,4], function(elem, index, arr){// какой то код который оперирует elem, index, arr}) Где elem - элементы массива, index - индекс элемента массива, arr - сам массив. |
function one (array, fn) { for (var i = 0, ln = array.length; i < ln; ++i) { fn(array[i], i, array); } } one ([1, 2, 3], function (el, i, ar) { console.log(el); console.log(i); console.log(ar); }); |
Чем нативный forEach не устроил?
|
Мне нужно самому написать, или придумать логику. Где можно найти код функции forEach?
|
function forEach (array, fn) { for (var i = 0, ln = array.length; i < ln; ++i) { fn(array[i], i); } } forEach([1,2,3], function (v) {console.log(v);}) есть встроенный в современных браузерах [1, 2, 3].forEach(function (v) {console.log(v);}) |
А если нам нужно что то возвращать? Например такой код
function example(arr, func) { for (var i = 0; i < arr.length; i++) { func(arr[i], i); } } var a = example(['abc', 'def', 'ghi'], function (elem) { return typeof elem === 'string'; }); console.log(a); Почему выводит undefined? И как сделать что бы с return нормально работало? |
Цитата:
for (var i = 0; i < array.length; ++i) { fn(array[i], i); } |
Цитата:
|
А как все это связать, когда пишу return в example, работает не так как ожидалось. Подскажите плиз
|
Цитата:
|
Цитата:
function example(arr, func) { for (var i = 0; i < arr.length; i++) { func(arr[i], i); } return func(); } так? |
Brainsss, а что ты хочешь, чтобы она возвращала?
|
Результат операции над элементами массива.
function example(arr, func) { for (var i = 0; i < arr.length; i++) { func(arr[i], i); } } var a = example(['abc', 'def', 'ghi'], function (elem) { console.log(elem) return typeof elem === 'string'; }); console.log(a); в данном случае должно быть true. |
Brainsss, ну так ведь не логично. У тебя же несколько элементов в массиве, следовательно, на каждый элемент своя операция, а вернуть должно что-то одно.
|
А нельзя так сделать, что бы проверяло каждый элемент, и если все тру то тру, если хоть один фолс, то и возвращает фолс?
|
Цитата:
function example(arr, func) { try{ for (var i = 0; i < arr.length; i++) { func(arr[i], i); } }catch(e){return e} } var a = example(['abc', 'def', 'ghi'], function (elem) { throw typeof elem === 'string'; }); console.log(a); |
Brainsss,
function arrayTypeOf(array, type) { for(var i=0; i<array.length; i++) { if(typeof array[i] != type) return false; } return true; }; var a = arrayTypeOf(['abc', 'def', 'ghi'], 'string'); alert(a); //true var b = arrayTypeOf(['abc', 'def', 5], 'string'); alert(b); //false var c = arrayTypeOf([1, 4, 2], 'number'); alert(c); //true |
Цитата:
|
Да, это понятно, но смысл в том что должна быть именно функция в параметрах которой тоже функция( в которой могут меняться условия для проверки элементов массива и индексов эл массива). Но все равно спасибо.
|
Brainsss, для таких случаев есть нативный метод массива - filter. Рекомендую почитать про него.
|
Всем спасибо. Решил. Просто нужен был метод every. Спасибо отдельное Ruslan_xDD, за правильную наводку на мысль.:)
|
Часовой пояс GMT +3, время: 09:51. |