Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   метод forEach (https://javascript.ru/forum/misc/27018-metod-foreach.html)

9xakep 31.03.2012 11:16

метод forEach
 
Часто начал встречать подобный метод, особенно у ливаандриамарума, можете объяснить как он работает?
Вот например:
<script>
var a = [1,2,3]
a.forEach(function (/* что здесь за аргументы? */) {
// увеличить каждый элемент массива на 1
})

Как выполнить?

nekto_O 31.03.2012 11:52

Цитата:

Сообщение от 9xakep
Как выполнить?

так понятно будет?
var a = [1,2,3];
a.forEach(function(el, idx, a) {
    console.log('a['+idx+'] = '+el+' in ['+a+']');
});

Точно не помню, но вроде в IE < 9 не работает, могу ошибаться...

Kolyaj 31.03.2012 11:54

http://alljs.ru/articles/array/iterators

9xakep 31.03.2012 12:02

Цитата:

Сообщение от nekto_O (Сообщение 165993)
так понятно будет?
var a = [1,2,3];
a.forEach(function(el, idx, a) {
    console.log('a['+idx+'] = '+el+' in ['+a+']');
});

Точно не помню, но вроде в IE < 9 не работает, могу ошибаться...

ага, все кажется разобрался)
То есть первый аргумент, это элемент с индексом idx, второй это как i в for(i=0;i<arr.length;i++). И третий это непосредтсвенно сам массив. Thanks :victory:
var a = [1,2,3];
a.forEach(function(el, idx, a) {
    a[idx] += 1
    console.log(a[idx])
});

А если мы укажем:
var a = [1,2,3]
a.forEach(function (a,b) { /* это будут el и idx? То есть если нужно получить массив("а" у вас, то мне по-любому придется печатать 3 аргумента? */ 
})

Kolyaj,
Спасибо почитаю

9xakep 31.03.2012 12:18

Я правильно понимаю, что map это тупое перебирание всех элементов и что-то с ними делание?
var a = [1,2,3]
var b = a.map(function(c) {
return c+1
})
alert(b)
var e  = a.map(function(v) {
return v + 'c'
})
alert(e)

Раед 31.03.2012 12:23

Цитата:

Сообщение от 9xakep
то мне по-любому придется печатать 3 аргумента

Ну при желании объект arguments к вашим услугам

9xakep 31.03.2012 12:35

<script>
var a = [1,2,3]
a.forEach(function () {
arguments[2][arguments[1]] +=1
})
alert(a)
</script>

Так что ли? Так мне легче уж аргументы написать чем так..

monolithed 31.03.2012 12:36

Цитата:

Сообщение от 9xakep
Я правильно понимаю, что map это тупое перебирание всех элементов и что-то с ними делание?

Kolyaj же дал ссылку на подробное описание этих методов, неа?
Или тут

arguments[2][arguments[1]] += 1

9xakep 31.03.2012 12:41

monolithed,
эм...так я прочитал ее и спрашиваю

monolithed 31.03.2012 12:43

Кстати можно так:

alert([].map.call([1,2,3], function (i) {
    return i + i;
}));

Раед 31.03.2012 12:55

Цитата:

Сообщение от monolithed
Кстати можно так:

А смысл? Разве что НоудЛисты перебирать

9xakep 31.03.2012 12:56

monolithed,
Во, самый простой способ :D
Тогда уж так:
<script>
alert([].map.call([1,2,3], []['constructor']['constructor']('i','return i + i; ')))
</script>

monolithed 31.03.2012 13:02

Цитата:

Сообщение от Раед
А смысл? Разве что НоудЛисты перебирать

Для общего развития

devote 31.03.2012 14:32

Maxmaxmахimus,
тогда уж лучше так:
Array.prototype.each = function (call) {
    for ( var i = 0; i < this.length; i++ ) {
        if ( call.call( this, i, this[i] ) === false ) return this;
    }
    return this;
}
внутри калбака

return false - break
иначе перебираем дальше.

Раед 31.03.2012 14:48

Цитата:

Сообщение от devote
внутри калбака

return false - break
иначе перебираем дальше.

Зачем изобретать велосипед (точнее Array.every)

devote 31.03.2012 15:13

Цитата:

Сообщение от Раед
Зачем изобретать велосипед (точнее Array.every)

ну если ты не заметил, изобретал не я... а чуток выше пост почитай, я лишь сделал репост с небольшим изменением.
и как отметил monolithed
Цитата:

Сообщение от monolithed
Для общего развития


Раед 31.03.2012 15:24

Цитата:

Сообщение от devote
изобретал не я.

Нет, у Maxmaxmахimus, велосипед покруче

devote 31.03.2012 15:35

Цитата:

Сообщение от Раед (Сообщение 166046)
Нет, у Maxmaxmахimus, велосипед покруче

кому что :)

devote 31.03.2012 23:19

Цитата:

Сообщение от Maxmaxmахimus
очевидно что первым элементом человек ожидает получать не индекс,а элемент, сравни это хотя бы с jQuery и пересмотри свои знания, не побоясь разрыва мозга от когнективного диссонанса

чет не понял к чему тут вообще джуквери? И хорош материться! Если уж говорить о джуквери, то джуквери именно что и делает в первом параметре ключ, во втором значение.. И не надо тут ляля... Да и это логичнее получать "ключ, значение".
Цитата:

Сообщение от Maxmaxmахimus
сравни это хотя бы с jQuery и пересмотри свои знания

Вот тебе бы и стоило пересмотреть свои знания хотя бы о том о чем говоришь.
Цитата:

Сообщение от Maxmaxmахimus
мало того 1 сильнее и больше нуля, так же и брейк сильшее и больше континьуюе. это более интуитивно чем твой бред.

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

Сообщение от Maxmaxmахimus
мало того, он является частью моей либы shels

Я рад за тебя


Часовой пояс GMT +3, время: 13:29.