از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
کار با توابع آرایه داخلی جاوا اسکریپت هنگام کار با هر زبان برنامه نویسی، احتمالاً به برخی عملکردها نیاز خواهید داشت که به طور بومی با آن زبان ادغام نشده باشند. بنابراین، یا خودتان آنها را پیاده سازی می کنید، یا به استفاده از ماژول ها یا کتابخانه های مختلف روی می آورید. این به طور مستقیم بر کارایی برنامه شما تأثیر می گذارد (استفاده از حافظه بیشتر، درخواست های HTTP بیشتر و غیره). برای جلوگیری…
سرفصلهای مطلب
معرفی
هنگام کار با هر زبان برنامه نویسی، احتمالاً به برخی عملکردها نیاز خواهید داشت که به طور بومی با آن زبان ادغام نشده باشد. بنابراین، یا خودتان آنها را پیاده سازی می کنید، یا به استفاده از ماژول ها یا کتابخانه های مختلف روی می آورید.
این به طور مستقیم بر کارایی برنامه شما تأثیر می گذارد (استفاده از حافظه بیشتر، درخواست های HTTP بیشتر و غیره). برای جلوگیری از این، توسعه دهندگان کار می کنند روی زبان های برنامه نویسی پیشرفته دارای توابع یکپارچه در داخل زبان ها هستند تا از نیاز به استفاده از کتابخانه های خارجی برای کارهای رایج جلوگیری کنند.
آشنایی با این توابع داخلی در نظر گرفته شده است دانش بنیادی از یک زبان، و شما هنوز هم می توانید فقط با توابع داخلی بسیار فاصله داشته باشید. البته، به احتمال زیاد در نهایت از برخی ماژول ها/کتابخانه ها برای کارهای خاصی استفاده خواهید کرد.
در این راهنمای مبتدی گرا، نگاهی به توابع داخلی جاوا اسکریپت مربوط به آرایه ها خواهیم انداخت.
انواع داده ها، ساختارها و اشیاء جاوا اسکریپت با توابع داخلی
در جاوا اسکریپت وجود دارد هشت نوع داده:
- رشته
- عدد
- بولی
- خالی
- تعریف نشده
- سمبل
- BigInt
- هدف – شی
با این حال، هر نوع داده ای یک تابع داخلی ندارد. آنها فقط تعریف شده اند روی: رشته، عدد و بولی.
وقتی صحبت از آن می شود ساختارهای داده در جاوا اسکریپت، هفت سازه پرکاربرد هستند:
- آرایه
- پشته
- صف
- لیست پیوند شده
- درخت
- نمودار
- قابل هشتم شدن
مشابه انواع داده ها، در ساختارهای داده، توابع داخلی فقط تعریف می شوند روی یک آرایه. سرانجام، اشیاء در جاوا اسکریپت نیز توابع داخلی مانند تاریخ، RegExp و ریاضی.
در این راهنما، ما تمرکز خواهیم کرد روی آرایه ها به طور خاص
توابع رشته ای داخلی در جاوا اسکریپت
یک آرایه در جاوا اسکریپت یک شی جهانی و فهرست مانند است. برای ذخیره داده ها در انواع مختلف استفاده می شود. عناصر آرایه جاوا اسکریپت نباید از یک نوع باشند، می توانند دلخواه باشند. این ویژگی از ساختارهای داده مانند فهرست به نام نیز شناخته می شود ناهمگونی – آرایه ها ناهمگن هستند.
آرایه ها مبتنی بر ایندکس هستند و از شروع می شوند 0
، که یک پیاده سازی استاندارد در زبان های برنامه نویسی مختلف است:
let myArray1 = (x1, x2, ... , xN);
let myArray2 = new Array(x1, x2, ... , xN);
let myArray3 = Array(x1, x2, ... , xN);
با توجه به استفاده از آرایه ها در کارهای روزمره، آشنایی با توابع مورد استفاده برای افزودن، حذف و غیره process یا دستکاری عناصر درون آنها دانش بنیادی محسوب می شود.
اگر میخواهید درباره مجموعههای جاوا اسکریپت به طور کلی اطلاعات بیشتری کسب کنید، راهنمای ما برای شروع کار با مجموعهها در جاوا اسکریپت را بخوانید!
فشار دادن()
این push(element)
تابع جدید اضافه می کند element
تا انتهای آرایه:
let array = (1, 2, 3, 4);
array.push(5);
console.log(array); // Output: (1, 2, 3, 4, 5)
به طور معمول، push()
عمل با پشته ها و صف ها مرتبط است – البته نه آرایه ها، در اجرای جاوا اسکریپت – این عملیات دوبله شده است push()
.
چرا؟
آرایه ها تا حد امکان عمومی هستند و در واقع می توانید از یک آرایه برای پیاده سازی a استفاده کنید Queue
یا Stack
در جاوا اسکریپت، زیرا اینها نیستند انواع داخلی، و شما باید خودتان آنها را پیاده سازی کنید یا از یک کتابخانه خارجی استفاده کنید
ادغام آرایه ها با فشار دادن()
علاوه بر این، با استفاده از push()
عملکرد در کنار عملگر spread، می توانید چندین آرایه را با هم ادغام کنید:
let array1 = (1, 2, 3, 4);
let array2 = (5, 6, 7, 8)
array1.push(...array2);
console.log(array1); // Output: ( 1, 2, 3, 4, 5, 6, 7, 8 )
ترکیدن()
pop()
می توان از آن برای حذف آخرین عنصر یک آرایه استفاده کرد. در کنار push()
، pop()
یکی از سه روش انتگرالی است که برای پیاده سازی صف ها و پشته ها استفاده می شود و می تواند خارج از آن زمینه نیز استفاده شود:
let array = (1, 2, 3, 4);
let x = array.pop();
console.log(x); // Output: 4
console.log(array); // Output: (1, 2, 3)
این pop()
تابع عنصر ظاهر شده را برمی گرداند، بنابراین می توانید از آن برای هر هدف دیگری استفاده مجدد کنید. به عنوان مثال، شما می توانید pop()
عناصر مستقیماً در یک آرایه جدید یا سایر ساختارهای داده، یا ذخیره آن در پایگاه داده.
تغییر مکان()
shift()
را حذف می کند اولین عنصر از یک آرایه و آن را برمی گرداند – اساساً مخالف pop()
. با این سه می توانید پیاده سازی کنید FIFO (اول در اول خروج) و LIFO (آخرین در اولین خروج) سازه های:
let array = (1, 2, 3);
let x = array.shift();
console.log(x); // Output: 1
console.log(array); // Output: (2, 3)
مرتب سازی()
این sort()
تابع عناصر یک آرایه را بر اساس مرتب می کند روی ترتیب طبیعی و صعودی آنها.
نظم طبیعی چیست؟
بسته به روی نوع داده – نظم طبیعی معانی مختلفی را به دنبال دارد. برای Number
نمونه ها، آنها را می توان از طریق مقایسه کرد <
، >
و عملگرهای مقایسه مشابه رشته ها با هم مقایسه می شوند بر اساس حروف الفبا.
آرایه های ناهمگن در دسته دسته بندی می شوند – عناصر نوع
Number
مرتب شده اند، به دنبال عناصر نوعString
، به دنبال اشیاء سفارشی.
شایان ذکر است که sort()
آرایه را مرتب می کند درجا، آرایه اصلی را تغییر دهید، بنابراین اگر می خواهید آرایه اصلی را نیز حفظ کنید – باید a را انجام دهید کپی عمیق، و نه فقط یک مرجع را نگه دارید، زیرا مرجع به آرایه تغییر یافته نیز اشاره می کند:
let array1 = (1, 3, 2, 0);
let array2 = ("JavaScript", "Java", "Python");
let array3 = ("b", 3, 1, "c", "a");
let originalArray1 = (...array1);
console.log('Sorted array1:', array1.sort());
console.log('Sorted array2:', array2.sort());
console.log('Sorted array3:', array3.sort());
console.log('Original array1:', originalArray1);
این نتیجه در:
Sorted array1: ( 0, 1, 2, 3 )
Sorted array2: ( 'Java', 'JavaScript', 'Python' )
Sorted array3: ( 1, 3, 'a', 'b', 'c' )
Original array1: ( 1, 3, 2, 0 )
شما همچنین می توانید یک تابع مرتب سازی را با پیاده سازی خود به آن ارائه دهید sort()
تابع، نادیده گرفتن رفتار پیش فرض. تابع باید دو آرگومان را بپذیرد و برگردد 1
، 0
یا -1
مستقر روی مقایسه آنها
اگر مقدار اول کمتر از مقدار دوم باشد، 1
برگردانده می شود. اگر مقدار اول از دومی بیشتر باشد -1
برگردانده می شود. اگر برابر باشند، 0
برگردانده می شود.
مستقر روی این
- اگر تابع مقداری بیشتر از 0 برمی گرداند – عنصر دوم مرتب می شود قبل از اولین.
- اگر تابع مقدار کمتر از 0 را برگرداند – اولین عنصر مرتب می شود قبل از دومین.
- اگر تابع 0 برگرداند – اینها برابر هستند و ترتیب نسبی خود را حفظ می کنند.
بیایید یک تابع سفارشی را پیاده سازی کنیم که رشته ها را به جای حروف الفبا به ترتیب معکوس مرتب می کند. برای رسیدن به این – ما تغییر دهید مقادیر بازگشتی به طوری که 1
در صورتی که مقدار اول از دومی بیشتر است، به جای برعکس:
let array = ("JavaScript", "Java", "Python");
console.log('Custom sort:', array.sort(customSort));
console.log('Default sort:', array.sort());
function customSort(a, b) {
if (a < b) {
return 1;
}
if (a > b) {
return -1;
}
return 0;
}
این نتیجه در:
Custom sort: ( 'Python', 'JavaScript', 'Java' )
Default sort: ( 'Java', 'JavaScript', 'Python' )
تکه()
این slice(start, end)
تابع بخشی از آرایه را بین مقدار شاخص برمی گرداند start
و مقدار شاخص end-1
. آن را به تمام معنا برش ها یک آرایه، و یک آرایه جدید متشکل از عناصر را برمی گرداند.
آرایه اصلی دست نخورده باقی می ماند:
let array = (10, 20, 30, 40, 50);
let subarray = array.slice(2, 4);
console.log(array); // Output: ( 10, 20, 30, 40, 50 )
console.log(subarray); // Output: (30, 40)
slice()
به آرایه ها چیست substring()
به رشته ها است – و این یک تابع واقعاً رایج برای کوتاه کردن یا زیرآرایه کردن توالی های خاص است.
splice()
این splice(start, deleteCount, item)
تابع برای جایگزینی و حذف عناصر در یک آرایه و همچنین درج آنها استفاده می شود. حدود آن در شروع می شود start
و حذف کنید deleteCount
عناصر، به طور اختیاری جایگزین آنها با item
یا عناصر متعدد در صورت ارائه.
علاوه بر این، آن برمی گرداند عناصر حذف شده، که در صورت تمایل می توانید آنها را ذخیره کنید:
let array = (10, 20, 30, 40, 50);
let splicedArray = array.splice(3, 2, 'newElement');
console.log('Spliced elements: ', splicedArray);
console.log('Changed array: ', array);
اینجا splice()
تابع از عنصر سوم شروع می شود (نمایه گذاری بر اساس 0) و دو عنصر زیر را حذف می کند و آنها را با یک واحد جایگزین می کند. newElement
. عناصر حذف شده در ذخیره می شوند splicedArray
آرایه:
Spliced elements: ( 40, 50 )
Changed array: ( 10, 20, 30, 'newElement' )
بدون اختیاری item
یا چندین آیتم، در واقع می توانید استفاده کنید splice()
تا حدودی شبیه به slice()
، اما در عین حال، در واقع عناصر را از آرایه حذف می کند:
let array = (10, 20, 30, 40, 50);
let splicedArray = array.splice(3, 2);
console.log('Spliced elements: ', splicedArray);
console.log('Changed array: ', array);
این نتیجه در:
Spliced elements: ( 40, 50 )
Changed array: ( 10, 20, 30 )
معکوس()
reverse()
همانطور که از نام آن پیداست، ترتیب عناصر در آرایه را معکوس می کند:
let array = (1, 2, 3);
console.log(array.reverse()) // Output: (3, 2, 1)
توجه داشته باشید: متد ()reverse آرایه را در محل معکوس می کند. این بدان معنی است که num_array و string_array اصلی برعکس شده و دنباله اصلی از بین می رود.
حتی اگر در محل انجام می شود، هنوز هم معمول است که نتیجه عملیات را به یک متغیر جدید “تخصیص” کنیم تا حداقل یک آرایه معکوس را نشان دهد:
let array = (1, 2, 3);
let arrayReversed = array.reverse();
console.log(arrayReversed ) // Output: (3, 2, 1)
نقشه ()
این map(f)
تابع تابع را اعمال می کند f
به یک کپی 🀄 از هر عنصر آرایه این تابع زمانی بسیار مفید است که میخواهید عناصر را به مجموعهای متفاوت نگاشت کنید، مانند کاربران به شناسههایشان یا عناصر را به یک دسته:
let array = ("Java", "Python", "JavaScript");
let langLengths = array.map(function(x){
return x.length;
});
console.log(langLengths);
در این قطعه کد، طول هر رشته را در لیست ترسیم می کنیم و به این ترتیب:
( 4, 6, 10 )
اگر میخواهید نام زبانها را در کنار طول آنها قرار دهید، میخواهید نتایج را در فرهنگ لغتی ذخیره کنید که میتواند جفتهای کلید-مقدار را در خود جای دهد:
let array = ("Java", "Python", "JavaScript");
let mapping = Object.assign({}, ...array.map((x) => ({(x): x.length})));
console.log(mapping);
این نتیجه در:
{ Java: 4, Python: 6, JavaScript: 10 }
برای هر()
forEach(f)
تابع را اعمال می کند f
برای هر عنصر آرایه تفاوت میان map
و forEach
آن است map
آرایه جدیدی ایجاد می کند و آرایه اصلی را تغییر نمی دهد forEach
نسخه اصلی را تغییر می دهد.
let languageArray = ("Java", "JavaScript", "Python");
console.log("Printing each element: \n______");
// Print each element
languageArray.forEach(element => console.log(element));
console.log("\nPrinting each element in uppercase: \n______");
// Print uppercase version of each element, while keeping original strings intact
languageArray.forEach(element => console.log(element.toUpperCase()));
// Change the original array, changing all elements to lowercase
languageArray.forEach(function(element, index, array){
array(index) = array(index).toLowerCase();
});
console.log("\nEach element converted to lowercase: \n______");
console.log(languageArray);
این element
حتی اگر از آن استفاده نمی کنید، مانند مثال آخر، باید تعریف شود. اینها منجر به:
Printing each element:
______
Java
JavaScript
Python
Printing each element in uppercase:
______
JAVA
JAVASCRIPT
PYTHON
Each element converted to lowercase:
______
( 'java', 'javascript', 'python' )
پیوستن()
این join()
متد همه عناصر یک آرایه را به یک رشته میپیوندد و بسته به اینکه عناصر را به نمایش رشتهای تبدیل میکند روی نوع آنها تبدیل اعداد به رشته ها آسان است اما برای اشیاء سفارشی، toString()
متد برای برگرداندن نمایش رشته فراخوانی می شود.
علاوه بر این، هنگام پیوستن – جداکننده پیشفرض یک کاما است که قالبی شبیه CSV تولید میکند. با این حال، میتوانید هر کاراکتری را تنها با انتقال آن به تابع به عنوان جداکننده تعریف کنید.
بیایید با انواع ساده تر شروع کنیم:
let array = (1, 2, "hello");
let str1 = array.join();
let str2 = array.join('');
let str3 = array.join('_');
console.log('Result: ', str1);
console.log('Result: ', str2);
console.log('Result: ', str3);
console.log('Type of result: ', typeof(str1));
اعداد به راحتی به رشته تبدیل می شوند و براساس آن به هم متصل می شوند روی جداکننده ای که ما تعریف کرده ایم:
Result: 1,2,hello
Result: 12hello
Result: 1_2_hello
Type of result: string
با این حال، هنگام برخورد با اشیاء سفارشی، تبدیل به یک رشته منجر به یک مرجع شیء می شود، مگر اینکه یک مرجع معتبر باشد. toString()
متد تعریف شده است که نمایش رشته ای را برمی گرداند. در این مورد، اجازه دهید a را تعریف کنیم User
کلاس، با الف toString()
که نام کاربر را برمی گرداند:
class User {
/** @access private */
#name;
constructor(name){
this.#name = name;
}
getName() {
return this.#name;
}
setName(name) {
this.#name = name;
}
toString() {
return this.#name;
}
}
let john = new User("John");
let maria = new User("Maria");
let array = (john, maria, "hello");
let str = array.join();
console.log('Result: ', str);
console.log(typeof('Type of result: ', str));
این نتیجه در:
Result: John,Maria,hello
Type of result: string
اگر میخواهید درباره کلاسها و OOP در جاوا اسکریپت اطلاعات بیشتری کسب کنید، راهنمای ما برای درک کلاسها در جاوا اسکریپت را بخوانید.
هر()
every(p)
برمی گرداند true
اگر هر عنصر آرایه گزاره تصویب شده را برآورده می کند p
.
گزاره چیزی نیست جز تابعی که متغیر را می پذیرد و برمی گرداند
true
یاfalse
.
برای این منظور، شما به راحتی می توانید توابع ناشناس (یا حتی توابع صریح) ایجاد کنید که بر اساس یک مقدار بولی برمی گردند. روی متغیری که شما عرضه می کنید به عنوان مثال، می توانید بررسی کنید که آیا every()
عنصر در یک لیست بزرگتر از 0
یا حاوی مقداری است:
let simpleArray = (1, 2, 3);
console.log(simpleArray.every(x => x > 0)); // Output: true
let objectArray = (new User('John'), new User('Maria'));
console.log(objectArray.every(x => x.age > 21));
مقداری()
some(p)
اگر درست است هر عنصر گزاره تصویب شده را برآورده می کند p
:
let a = (1, 2, 3);
console.log(a.some(x => x == 2)); // Output: true
فیلتر()
filter(p)
یک آرایه جدید متشکل از عناصری که گزاره تصویب شده را برآورده می کند، برمی گرداند p
. عناصری که از آن عبور نمی کنند (عملکرد برمی گردد false
) پس از فیلتر کردن شامل نمی شوند:
let a = (1, 2, 3);
console.log(a.every(x => x > 1)); // Output: (2, 3)
indexOf() و lastIndexOf()
این indexOf()
و lastIndexOf()
توابع یک عنصر را می پذیرند و اگر در آرایه وجود داشته باشد، شاخص آن را به ترتیب برمی گرداند. اگر موجود نیست – -1
برگردانده می شود.
اگر چندین عنصر منطبق با عنصر ارائه شده وجود داشته باشد – فقط شاخص اولی برگردانده می شود:
let simpleArray = (1, 4, 5, 4, 5, 6, 5, 8);
console.log(simpleArray.indexOf(5));
console.log(simpleArray.indexOf(10));
این نتیجه در:
2
-1
به طور مشابه، lastIndexOf()
متد به عقب تکرار می شود و مقدار را برمی گرداند آخر وقوع، به جای اولین رخداد یک عنصر مطابق:
let simpleArray = (1, 4, 5, 4, 5, 6, 5, 8);
console.log(simpleArray.lastIndexOf(5));
console.log(simpleArray.lastIndexOf(10));
این نتیجه در:
6
-1
علاوه بر این، شما می توانید یک نقطه شروع اختیاری برای آن ارائه کنید lastIndexOf()
و indexOf()
توابعی که هر دو مبتنی بر 0 هستند:
let simpleArray = (1, 4, 5, 4, 5, 6, 5, 8);
console.log(simpleArray.lastIndexOf(5, 3));
console.log(simpleArray.indexOf(5, 5));
این lastIndexOf()
در انتهای آرایه – در عنصر شروع نمی شود 8
. از عنصر با شاخص شروع می شود 3، که عنصر دوم است 4
در این آرایه این indexOf()
از ابتدای آرایه شروع نمی شود، بلکه از عنصر شروع می شود روی شاخص از 5:
// ↓ lastIndexOf() start
let simpleArray = (1, 4, 5, 4, 5, 6, 5, 8);
// ↑ indexOf() start
با توجه به نقاط شروع تغییرات، این نتیجه به شرح زیر است:
2
6
نتیجه
در این راهنما، نگاهی به برخی از متداولترین توابع داخلی مربوط به آرایهها در جاوا اسکریپت انداختهایم. با توجه به رایج بودن آرایه ها در کار روزانه – آشنایی با این توابع باید برای هر توسعه دهنده جدیدی
منتشر شده در 1403-01-15 04:25:07