از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مسطح کردن آرایه آرایه ها در TypeScript
سرفصلهای مطلب
معرفی
کار با آرایه ها بخشی جدایی ناپذیر از برنامه نویسی در TypeScript است و یکی از رایج ترین کارهایی که ممکن است با آن روبرو شوید صاف کردن آرایه ای از آرایه ها است. این process شامل تبدیل یک آرایه چند بعدی به یک آرایه تک بعدی است که اگر با روش های خاصی آشنا نباشید، ممکن است کمی مشکل باشد. در این راهنما، ما اصول مسطح کردن آرایه در TypeScript را پوشش خواهیم داد و در مورد مسائل استنتاج احتمالی که ممکن است به وجود بیاید بحث خواهیم کرد. ما همچنین در مورد روش مسطح کردن آرایه ها با استفاده از forEach()
روش.
چرا آرایه ها را صاف کنیم؟
مسطح آرایه است process از تبدیل یک آرایه ای از آرایه ها در یک آرایه واحد به عبارت دیگر، این در مورد حذف ساختار تودرتو از یک آرایه چند بعدی است.
این ممکن است مفید باشد، برای مثال، زمانی که شما نیاز دارید process همه عناصر در یک آرایه تو در تو به صورت متوالی.
آرایه آرایه زیر را در نظر بگیرید:
let arr: number()() = ((1, 2), (3, 4), (5, 6));
پس از صاف کردن، به یک آرایه منفرد می رسیم:
let flatArr: number() = (1, 2, 3, 4, 5, 6);
این موضوع را ساده می کند process از تکرار روی آرایه، زیرا دیگر مجبور نیستیم با حلقه های تودرتو سروکار داشته باشیم.
مشکلات استنتاج بالقوه با آرایه های مسطح
هنگام کار با TypeScript، باید از مشکلات احتمالی استنتاج که ممکن است هنگام مسطح کردن آرایه ها رخ دهد، آگاه باشید. TypeScript یک زبان تایپ ایستا است، به این معنی که در زمان کامپایل انواع را بررسی می کند. وقتی یک آرایه را مسطح می کنید، TypeScript باید نوع آرایه به دست آمده را استنتاج کند.
آرایه ای از آرایه ها را در نظر بگیرید که در آن هر زیرآرایه دارای عناصری از انواع مختلف است:
let mixedArr: (number | string)()() = ((1, "a"), (2, "b"), (3, "c"));
اگر بخواهیم این آرایه را مسطح کنیم، TypeScript باید نوع آرایه حاصل را استنباط کند. در این مورد، TypeScript به درستی نوع را به عنوان استنتاج می کند (number | string)()
.
با این حال، اگر انواع موجود در زیرآرایه ها سازگار یا واضح نباشند، TypeScript ممکن است نتواند نوع را به درستی استنتاج کند. بنابراین مطمئن شوید که انواع سازگار هستند تا از هرگونه مشکل احتمالی جلوگیری شود.
مسطح کردن آرایه ها با استفاده از برای هر() روش
با استفاده از forEach()
روش مسطح کردن یک آرایه یکی از راه های ممکن برای انجام این کار است. این متد برای هر عنصر آرایه یک بار تابع callback ارائه شده را اجرا می کند. در اینجا روش استفاده از آن برای صاف کردن یک آرایه آمده است:
let arr: number()() = ((1, 2), (3, 4), (5, 6));
let flatArr: number() = ();
arr.forEach(subArr => {
subArr.forEach(element => {
flatArr.push(element);
});
});
console.log(flatArr); // Output: (1, 2, 3, 4, 5, 6)
در این کد ابتدا یک آرایه خالی جدید اعلام می کنیم flatArr
. سپس از forEach()
روش دو بار: یک بار برای تکرار روی آرایه بیرونی، و یک بار برای تکرار روی هر زیرآرایه. برای هر عنصر در زیرآرایه ها از push()
روش اضافه کردن آن به flatArr
. نتیجه آرایه مسطح جدید ما است!
مسطح کردن آرایه ها با استفاده از کاهش دادن() روش
این reduce()
متد در TypeScript یکی دیگر از ابزارهای عالی برای مسطح کردن یک آرایه از آرایه ها است. تابعی را در برابر یک “انباشت کننده” و هر عنصر در آرایه (از چپ به راست) اعمال می کند. کاهش دادن آن را به یک مقدار خروجی واحد می رساند.
در اینجا مثالی از روش استفاده شما آورده شده است reduce()
برای صاف کردن یک آرایه:
let arr = ((1, 2, 3), (4, 5, 6), (7, 8, 9));
let flatArr = arr.reduce((acc, value) => acc.concat(value), ());
console.log(flatArr);
وقتی این کد را اجرا می کنید، باید خروجی زیر را ببینید:
(1, 2, 3, 4, 5, 6, 7, 8, 9)
اینجا، reduce()
با یک آرایه خالی به عنوان انباشت کننده (آگومان دوم به reduce()
، ()
) و سپس هر آرایه فرعی را به آن الحاق می کند. نتیجه یک آرایه مسطح جدید است.
توجه داشته باشید: این reduce()
متد آرایه اصلی را تغییر نمی دهد. در عوض، آرایه جدیدی را برمی گرداند. این نکته مهمی است که باید هنگام کار با متدهای آرایه در TypeScript به خاطر بسپارید.
نتیجه
مسطح کردن آرایه ای از آرایه ها در TypeScript ممکن است در ابتدا چالش برانگیز به نظر برسد، اما با روش های مناسب، می تواند نسبتاً ساده باشد. این forEach()
و reduce()
روشها راهحلهای سادهای برای مسطح کردن آرایهها ارائه میدهند که هر کدام مزایای خاص خود را دارند. و به یاد داشته باشید، این روشها آرایه اصلی را تغییر نمیدهند، بلکه یک آرایه مسطح جدید را برمیگردانند.
منتشر شده در 1403-01-01 19:52:03