شما میتوانید ساختار دادهی خود را بین آرایهها و سایر ساختارهای داده به صورت رفت و برگشتی تبدیل و دگرگون کنید.
از متد Object.groupBy() میتوان برای گروهبندی عناصر یک آرایه استفاده کرد. این متد یک تابع ارزیابی (تست) دریافت میکند و این تابع کالبک، رشتهای را برمیگرداند که نشاندهندهی گروهِ عنصر فعلی است.
برای مثال، در اینجا آرایهای از موجودی انبار (Inventory) داریم که حاوی اشیاء غذایی است و هر شیء یک نام (name) و یک نوع (type) دارد:
const inventory = [
{ name: "asparagus", type: "vegetables" },
{ name: "bananas", type: "fruit" },
{ name: "goat", type: "meat" },
{ name: "cherries", type: "fruit" },
{ name: "fish", type: "meat" },
];
برای استفاده از Object.groupBy()، شما یک تابع کالبک را به آن پاس میدهید. این تابع با عنصر فعلی (و به صورت اختیاری با ایندکس فعلی و خودِ آرایه) صدا زده میشود و رشتهای را برمیگرداند که گروه آن عنصر را مشخص میکند.
کد زیر از یک تابع پیکانی (Arrow function) استفاده میکند تا نوع (type) هر عنصر آرایه را برگرداند (در این کد از سینتکس تخریب ساختار شیء یا همان Object destructuring در آرگومانهای تابع استفاده شده تا ویژگی type را از شیء پاس داده شده بیرون بکشد).
نتیجهی نهایی، شیئی است که ویژگیهای (Properties) آن بر اساس رشتههای منحصربهفردِ برگشت داده شده از تابع کالبک نامگذاری شدهاند. به هر کدام از این ویژگیها، آرایهای اختصاص داده میشود که حاوی عناصر قرار گرفته در آن گروه است:
const result = Object.groupBy(inventory, ({ type }) => type);
console.log(result);
/* خروجی در کنسول:
{
vegetables: [{ name: 'asparagus', type: 'vegetables' }],
fruit: [
{ name: 'bananas', type: 'fruit' },
{ name: 'cherries', type: 'fruit' }
],
meat: [
{ name: 'goat', type: 'meat' },
{ name: 'fish', type: 'meat' }
]
}
*/
نکتهی مهم: شیء برگشت داده شده به عناصر همان آرایهی اصلی ارجاع دارد (یعنی کپی عمیق یا Deep copy از آنها ساخته نشده است). بنابراین تغییر ساختار داخلی این عناصر، هم در آرایهی اصلی و هم در شیء گروهبندیشدهی نهایی منعکس خواهد شد.
اگر نمیتوانید از رشته متنی به عنوان کلید (Key) استفاده کنید—به عنوان مثال، اگر اطلاعات مورد نظر برای گروهبندی با شیئی مرتبط است که احتمال دارد تغییر کند—میتوانید به جای آن از متد Map.groupBy() استفاده کنید. این متد عملکردی بسیار شبیه به Object.groupBy() دارد، با این تفاوت که عناصر آرایه را درون یک شیء Map گروهبندی میکند؛ در نتیجه میتوانید از هر مقدار دلخواهی (یک شیء یا یک نوع دادهی اولیه و Primitive) به عنوان کلید استفاده کنید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript