تکرارهای آرایه (Array Iterations)
می خواهیم روی همه اعضای آرایه، کاری انجام دهیم. «تکرار (Iteration)» یعنی گذر از تک تک آیتم ها. با مثال های کوتاه جلو می رویم و فرق متدها را می بینیم.
forEach() — اجرای تابع برای هر آیتم
کالبک (Callback) یعنی تابعی که به متد می دهیم تا روی هر عضو اجرا شود.
const numbers = [45, 4, 9, 16, 25];
let txt = "";
numbers.forEach(myFunction);
function myFunction(value, index, array) {
txt += value + "<br>";
}
const numbers = [45, 4, 9, 16, 25];
let txt = "";
numbers.forEach(myFunction);
function myFunction(value) {
txt += value + "<br>";
}
map() — ساخت آرایه جدید
map یک آرایه جدید می سازد. اصل آرایه تغییر نمی کند.
const numbers1 = [45, 4, 9, 16, 25];
const numbers2 = numbers1.map(myFunction);
function myFunction(value, index, array) {
return value * 2;
}
const numbers1 = [45, 4, 9, 16, 25];
const numbers2 = numbers1.map(myFunction);
function myFunction(value) {
return value * 2;
}
flatMap() — map سپس تخت کردن
flatMap اول نگاشت می کند، سپس یک سطح آرایه را تخت می کند.
const myArr = [1, 2, 3, 4, 5, 6];
const newArr = myArr.flatMap(function(x) {
return x * 2;
});
filter() — نگه داشتن آیتم های قبول شده
filter فقط آیتم هایی را نگه می دارد که شرط را پاس کنند.
const numbers = [45, 4, 9, 16, 25];
const over18 = numbers.filter(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
const numbers = [45, 4, 9, 16, 25];
const over18 = numbers.filter(myFunction);
function myFunction(value) {
return value > 18;
}
reduce() — جمع کردن به یک مقدار
reduce کل آرایه را به یک مقدار تبدیل می کند. جهت پیش فرض چپ به راست است.
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction);
function myFunction(total, value, index, array) {
return total + value;
}
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction);
function myFunction(total, value) {
return total + value;
}
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction, 100);
function myFunction(total, value) {
return total + value;
}
reduceRight() — از راست به چپ
reduceRight مثل reduce است؛ اما از راست به چپ می رود.
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduceRight(myFunction);
function myFunction(total, value, index, array) {
return total + value;
}
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduceRight(myFunction);
function myFunction(total, value) {
return total + value;
}
every() — آیا همه قبول شدند؟
every بررسی می کند همه آیتم ها شرط را پاس می کنند یا نه.
const numbers = [45, 4, 9, 16, 25];
let allOver18 = numbers.every(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
const numbers = [45, 4, 9, 16, 25];
let allOver18 = numbers.every(myFunction);
function myFunction(value) {
return value > 18;
}
some() — آیا بعضی قبول شدند؟
some کافی است یک عضو شرط را پاس کند تا نتیجه true شود.
const numbers = [45, 4, 9, 16, 25];
let someOver18 = numbers.some(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
Array.from() — ساخت آرایه از قابل تکرار
از رشته یا هر «قابل تکرار (Iterable)» می تواند آرایه بسازد.
let text = "ABCDEFG";
Array.from(text);
const myNumbers = [1, 2, 3, 4];
const myArr = Array.from(myNumbers, function(x) {
return x * 2;
});
keys() و entries() — پیمایش کلید و جفت ها
keys یک «تکرارگر (Iterator)» از ایندکس ها می دهد. entries جفت [ایندکس، مقدار].
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const keys = fruits.keys();
for (let x of keys) {
text += x + "<br>";
}
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const f = fruits.entries();
for (let x of f) {
document.getElementById("demo").innerHTML += x;
}
with() — بروزرسانی امن عضو
with یک کپی جدید می سازد و فقط یک ایندکس را عوض می کند.
const months = ["Januar", "Februar", "Mar", "April"];
const myMonths = months.with(2, "March");
Spread (...) — بازکردن آرایه
Spread عناصر آرایه را جدا می کند. برای ترکیب کردن هم عالی است.
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [...arr1, ...arr2];
const q1 = ["Jan", "Feb", "Mar"];
const q2 = ["Apr", "May", "Jun"];
const q3 = ["Jul", "Aug", "Sep"];
const q4 = ["Oct", "Nov", "Des"];
const year = [...q1, ...q2, ...q3, ...q4];
const arr1 = [1, 2, 3];
const arr2 = [...arr1];
const numbers = [23, 55, 21, 87, 56];
let minValue = Math.min(...numbers);
let maxValue = Math.max(...numbers);
Rest (...) — جمع کردن بقیه آیتم ها
Rest در «ساختاردهی (Destructuring)» بقیه عناصر را در یک آرایه جمع می کند.
let a, rest;
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
[a, ...rest] = arr1;
let a, b, rest;
const arr1 = [1, 2, 3, 4, 5, 6, 7, 8];
[a, b, ...rest] = arr1;
ادامه مسیر «تکرارهای آرایه»
برای جستجو برو به جستجوی آرایه. برای مرتب کردن نتایج برو به مرتب سازی آرایه. همچنین صفحه تکرارهای آرایه را نشانه گذاری کن.
جمع بندی سریع
- forEach فقط اجرا می کند؛ چیزی برنمی گرداند.
- map و filter آرایه جدید می سازند.
- reduce خروجی تک مقداری می دهد.
- every برای همه؛ some برای بعضی هاست.
- spread باز می کند؛ rest جمع می کند.