در این تمرین قصد داریم در داخل آرایه خود که دارای لیستی از محصولات است، محصول خود را جستجو کرده و براساس جستجوی انجام شده محصول را از لیست آرایه پاک کرده و آرایه جدید را برگشت دهیم.
لیست محصولات:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let products = [ { "title" : "book1", "price" : 1200 }, { "title" : "book2", "price" : 1400 }, { "title" : "book3", "price" : 2200 } ] |
برای حذف محصول یک تابع به نام deleteProduct ایجاد می کنیم.این تابع دارای دو آرگومان است.
- آرگومان آرایه
- آرگومان نام محصول جهت حذف
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
let products = [ { "title" : "book1", "price" : 1200 }, { "title" : "book2", "price" : 1400 }, { "title" : "book3", "price" : 2200 } ] let deleteProduct = function(arr, name){ } deleteProduct(products,"Book2"); |
حال درون تابع deleteProduct از متد findIndex برای جستجوی اندیس استفاده می کنیم.بررسی این تابع را به متغیری به نام indexItem تخصیص می دهیم.
در این تابع مقدار وارد شده توسط کاربر برای جستجو را با نام محصول مقایسه می کنیم.قبل از مقایسه کاراکترها را با استفاده از متد toLowerCase به حروف کوچک تبدیل می نماییم.
نتیجه حاصل از مقایسه را به متغیر indexItem برگشت می دهیم.نتیجه یا ۰ و بزرگتر از آن است یا در صورت پیدا نکردن برابر با ۱- است.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
let products = [ { "title" : "book1", "price" : 1200 }, { "title" : "book2", "price" : 1400 }, { "title" : "book3", "price" : 2200 } ] let deleteProduct = function(arr, name){ let indexItem = arr.findIndex(function(item,index){ return item.title.toLowerCase() === name.toLowerCase(); }); } |
حال از متد findIndex خارج شده و شرطی را قرار می دهیم که در صورتی که اندیس وجود داشت از آرایه مورد نظر آیتم را با استفاده از متد splice حذف کن و نتیجه را به تابع deleteProduct برگشت بده.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
let products = [ { "title" : "book1", "price" : 1200 }, { "title" : "book2", "price" : 1400 }, { "title" : "book3", "price" : 2200 } ] let deleteProduct = function(arr, name){ let indexItem = arr.findIndex(function(item,index){ return item.title.toLowerCase() === name.toLowerCase(); }); if(indexItem > -1) arr.splice(indexItem,1); return arr } |
حال آگر مقدار تابع بازگشتی تابع deleteProduct را console بگیریم مقدار بازگشتی برابر با دو آیتم در قالب آرایه است و محصول حذفی در آن وجود ندارد.
مثال:
1 2 3 4 5 |
console.log(deleteProduct(products,"Book2")); /* 0: {title: 'book1', price: 1200} 1: {title: 'book3', price: 2200} */ |