حلقه forEach در جاوا اسکریپت روی یک آرایه یا لیست انجام میشود و به عنوان آرگومان ورودی یک function دریافت میکند
var fruits = ["apple", "orange", "cherry"];
fruits.forEach(myFunction);
function myFunction(item, index) {
document.getElementById("demo").innerHTML += index + ":" + item + "";
}
output :
0:apple
1:orange
2:cherry
امضای کامل حلقه forEach
array.forEach(function(currentValue, index, arr), thisValue)
به عنوان مثال
var numbers = [65, 44, 12, 4];
numbers.forEach(myFunction)
function myFunction(item, index, arr) {
arr[index] = item * 10;
}
document.getElementById("demo").innerHTML = numbers;
output :
650,440,120,40
map در جاوا اسکریپت
var numbers = [65, 44, 12, 4];
var newarray = numbers.map(myFunction)
function myFunction(num) {
return num * 10;
}
document.getElementById("demo").innerHTML = newarray;
map
کردن نیز همانند forEach روی آرایهها و لیستها انجام میشود و به عنوان
ورودی function دریافت میکند . به این گونه توابع higher order function
گفته میشود . نام تابع بدون پرانتز و متغیر درون map و سایر higher order
functionها نوشته میشود . یا اینکه میشه مستقیم خود function رو اون تو
نوشت و یا از Arrow functionها استفاده کرد.
- تفاوت map و
forEach در این است که توابعی مثل forEach در واقع Mutable (قابل تغییر)
هستند و توابعی مثل map و filter از نوع immutable هستند به این معنی که
آرایه اصلی را تغییر نمیدهند و یک آرایه جدید ایجاد میکنند و بازگشت میدهند
.
- نکته دیگر تفاوت پرفورمنس بین forEach و map است که در map پرفورمنس بسیار بالاتر است.
- خروجی map یک آرایه یا لیست جدید است و با return بازمیگردد ، forEach خودش مستقیما خروجی ندارد. (
map الزاما باید یک return برگرداند )