ممکن است شرایطی پیش بیاید که بخواهیم یکی از آیتمهای داخل یک آرایه را حذف کنیم. مثلا لیستی از اعداد داریم که هربار یکی از آنها بهطور تصادفی انتخاب میشود و نمیخواهیم در دفعات بعدی، مورد تکراری انتخاب شود؛ لذا بایستی آیتم مورد نظر از آرایه حذف شود. برای حذف ایندکس دلخواه از یک آرایه، روشهای مختلفی وجود دارند که در این مطلب به آنها میپردازیم.
روش اول: متد pop
کد زیر را در نظر بگیرید:
1 2 3 4 |
var ar = [1, 2, 3, 4, 5, 6]; ar.pop(); ar.pop(4); // [1, 2, 3, 4] |
اگر به داخل متد pop، مقداری ارسال نشود، آخرین آیتم آرایه حذف خواهد شد و اگر مقداری ارسال شود، آن مقدار ایندکس یکی از آیتمها است که باعث جذف آن از آرایه میشود. نکته قابل توجه این است که متد pop علاوه بر حذف ایندکس، مقدار آن را نیز برمیگرداند و در واقع از این متد برای برداشتن و بیرون کشیدن کامل یک ایندکس استفاده میشود تا دیگر در آرایه وجود نداشته باشد.
روش دوم: حذف آیتم از انتها
کد زیر را در نظر بگیرید:
1 2 3 |
var ar = [1, 2, 3, 4, 5, 6]; ar.length = 4; // [1, 2, 3, 4] |
یک آرایه بهطور 6 در اختیار داریم. اگر طول آن را بهطور دستی به مقدار 4 تغییر دهیم، دو آیتم انتهایی حذف خواهند شد.
روش سوم: حذف آیتم از ابتدا
کد زیر را در نظر بگیرید:
1 2 3 |
var ar = ['zero', 'one', 'two', 'three']; ar.shift(); // ["one", "two", "three"] |
متد شیفت باعث حذف آیتم از ابتدای یک آرایه میشود.
روش چهارم: استفاده از Splice
کد زیر را در نظر بگیرید:
1 2 3 |
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; var removed = arr.splice(2,2); // [1, 2, 5, 6, 7, 8, 9, 0] |
به کمک متد splice میتوان بخش مورد نظری از یک آرایه را برید! در کد بالا، دو آیتم از ایندکس 2 به بعد بریده شده است. ورودی اول این متد، نقطهی شروع بوده و ورودی دوم آن نیز تعداد آیتمها از آن نقطه به بعد میباشد. بدین ترتیب، آیتمهای 3 و 4 از آرایه حذف خواهند شد.
به مثال دیگری توجه کنید:
1 2 3 |
var arr = ["bar", "baz", "foo", "qux"]; list.splice(0, 2); // ["foo", "qux"]. |
در اینجا نیز دو آیتم از ایندکس 0 (اول) به بعد حذف میشوند.
روش پنجم: استفاده از Slice برای آیتم مشخص
کد زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 |
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; for( var i = 0; i < arr.length; i++) { if ( arr[i] === 5) { arr.splice(i, 1); } } // [1, 2, 3, 4, 6, 7, 8, 9, 0] |
در این کد هدف آن است که مقداری خاص از داخل آرایه حذف شود! مثلا هدف، حذف تمامی مقادیر 5 است. بنابراین یک حلقه نوشته و سپس آیتم مورد نظر را بررسی میکنیم و اگر برابر مقدار مورد نظر بود، از آن ایندکس یک واحد به جلوتر حذف میشود (که در واقع فقط خود همان ایندکس حذف میشود)
اما اجازه دهید! این کد یک مشکل بزرگی دارد! اگر دو آیتم 5 در داخل آرایه بود چه؟!
در آن صورت با حذف یکی از ایندکسها، جایگاه ایندکسها به تداخل میخورد! با روش زیر میتوان مشکل را بهسادگی حل کرد:
1 2 3 4 5 6 7 8 |
var arr = [1, 2, 3, 4, 5, 5, 6, 7, 8, 5, 9, 0]; for( var i = 0; i < arr.length; i++){ if ( arr[i] === 5) { arr.splice(i, 1); i--; } } // [1, 2, 3, 4, 6, 7, 8, 9, 0] |
همانطور که میبینید، هربار که آیتم پیدا شد، شمارنده را یک واحد کم میکنیم؛ تا مشکلی پیش نیاید! به همین سادگی!
روش ششم: استفاده از filter
به کد زیر دقت کنید:
1 2 3 |
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]; var filtered = array.filter(function(value, index, arr) { return value > 5;} ); //filtered => [6, 7, 8, 9]//array => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] |
در اینجا به کمک متد filter و با ارسال یک کالبک (تابع) به داخل آن جهت فیلتر کردن آرایه، تعیین کردیم که اگر مقدار بزرگتر از 5 بود، true برگردانده شود؛ و در این صورت، آن مقدار یکی از مقادیر آرایهی جدید خواهد شد. بنابراین مقادیر 6 تا 9 فیلتر میشوند.
روش هفتم: دستور delete
به کد زیر دقت کنید:
1 2 3 |
var ar = [1, 2, 3, 4, 5, 6]; delete ar[4]; // [1, 2, 3, 4, undefined, 6] |
از اپراتور delete نیز میتوان برای حذف مقدار داخل یک آرایه استفاده کرد؛ اما توجه داشته باشید که این اپراتور، برروی طول آرایه تاثیری نخواهد داشت و در واقع، مقدار مورد نظر پس از حذف شدن، به undefined تغییر خواهد یافت.
روشهای متعدد دیگری نیز وجود دارند که در اینجا به مهمترین موارد اشاره شد.
نظرات ثبت شده بدون دیدگاه