30 روز با Node - روز ششم: آرایه ها و متدهای آن

23 مرداد 1397
array-methods-nodejs

مقدمه

آرایه ها به منظور ذخیره سازی مقادیر چندگانه در یک var یا متغیر ساده به کار می روند. اندیس آرایه ها از 0 شروع می شود. امروز میخواهیم در مورد توابع توکار مختص آرایه ها همچون push، pop، join و غیره مطالبی یاد بگیریم.

ایجاد یک آرایه در نود جی اس

آرایه ها به شیوه های زیر ایجاد می شوند:

// an array of names

var names = ["rj", "ricky", "alex"];

console.log(names);

//calculating the length of array

var len = names.length;

console.log(len);     

//Another way to create array

var arr = new Array(3);        // declare an array "arr" of size 3

arr = [1,5,7];                 // initialize elements of array


//OR

// declare and initialize in a single statement

var arr1 = new Array(2,5,7);

console.log("arr : " + arr);

console.log("arr 1 : " + arr1);

                                                            

خروجی کد فوق به شرح زیر است:

                                                            
>node create-array.js

[ 'rj', 'ricky', 'alex' ]

3

arr : 1,5,7

arr 1 : 2,5,7

متد push() در آرایه ها

به کمک این متد می توانید یک عنصر به انتهای یک آرایه اضافه کنید:

                                                          
arr = ['a','e','i','o'];

console.log(arr);

arr.push('u');

console.log(arr);     

این هم خروجی:

>node push.js

[ 'a', 'e', 'i', 'o' ]

[ 'a', 'e', 'i', 'o', 'u' ]



متد pop() در آرایه ها

به کمک این متد، آخرین عنصر آرایه را حذف می کنیم:

arr = [ 5 , 5 , 8 , 7 , 6 ];

console.log(arr);

arr.pop();

console.log(arr);                                           

خروجی کد فوق:

>node pop.js

[ 5, 5, 8, 7, 6 ]

[ 5, 5, 8, 7 ]


متد unshift() در آرایه ها

به کمک متد unshift یک عنصر به ابتدای آرایه اضافه می کنیم:

arr = [ 5 , 5 , 8 , 7 , 6 ];

console.log(arr);

arr.unshift(1);

console.log(arr);                                                   

خروجی کد فوق:

>node unshift.js

[ 5, 5, 8, 7, 6 ]

[ 1, 5, 5, 8, 7, 6 ]

متد shift() در آرایه ها

به کمک این متد، اولین عنصر آرایه حذف خواهد شد:

arr = ['b','a','e','i','o','u'];

console.log(arr);

arr.shift();

console.log(arr);                                           

خروجی کد فوق:

>node shift.js

[ 'b', 'a', 'e', 'i', 'o', 'u' ]

[ 'a', 'e', 'i', 'o', 'u' ]


متد reverse() در آرایه ها

با این متد، ترتیب عناصر آرایه ها معکوس خواهد شد. طوری که عنصر آخر به جای اول و عنصر اول به جای آخر، عنصر ما قبل آخر به جای دوم و عنصر دوم به ماقبل آخر و الی آخر:

arr = ['b','e','a','o','p','n','r'];

console.log(arr);

arr.reverse();

console.log(arr);                                           

خروجی کد فوق:

>node reverse.js

[ 'b', 'e', 'a', 'o', 'p', 'n', 'r' ]

[ 'r', 'n', 'p', 'o', 'a', 'e', 'b' ]

متد sort() در آرایه ها

متد sort عناصر یک آرایه را به ترتیب صعودی مرتب می کند:

arr = ['b','e','a','o','p','n','r'];

console.log(arr);

arr.sort();

console.log(arr);

خروجی کد فوق:

>node sort.js

[ 'b', 'e', 'a', 'o', 'p', 'n', 'r' ]

[ 'a', 'b', 'e', 'n', 'o', 'p', 'r' ]

متد splice() در آرایه ها

متد splice به دو منظور به کار می رود، یعنی هم به عنوان افزودن و تزریق عناصر به آرایه و هم برچیدن عناصر از آرایه. به کمک کدنویسی، هر روش توضیح داده خواهد شد.

1. افزودن عناصر به آرایه به کمک splice:

arr = ['b','e','a','o','p','n','r'];

console.log(arr);

arr.splice(2,2,'rj','nodejs');

console.log(arr);                                           


خروجی کد فوق:

>node splice-add.js

[ 'b', 'e', 'a', 'o', 'p', 'n', 'r' ]

[ 'b', 'e', 'rj', 'nodejs', 'p', 'n', 'r' ]

2. حذف یا برچیدن عناصر به کمک splice:

arr = ['b','e','a','o','p','n','r'];

console.log(arr);

arr.splice(2,2);

console.log(arr);                                           

خروجی کد فوق:

>node splice-remove.js

[ 'b', 'e', 'a', 'o', 'p', 'n', 'r' ]

[ 'b', 'e', 'p', 'n', 'r' ]

متد concat() در آرایه ها

متد concat() برای چسباندن دو آرایه به یکدیگر و به دست آوردن یک آرایه جدید بطوری که ترتیب عناصر آرایه جدید، از کنار هم چیدن عناصر آرایه دوم بعد از عناصر آرایه اول خواهد بود:

arr = ['tomatoes','pineapple'];

arr2 = ['mango','peach','apple'];

console.log(arr);

console.log(arr2);

var new_arr = arr.concat(arr2);

console.log(new_arr);                                       

خروجی کد فوق:

>node concat.js

[ 'tomatoes', 'pineapple' ]

[ 'mango', 'peach', 'apple' ]

[ 'tomatoes', 'pineapple', 'mango', 'peach', 'apple' ]

متد indexOf() در آرایه ها

متد indexOf عنصری را که عنوان آرگومان داده شده است، در آرایه جست و جو می کند و اندیس اولین وقوع آن را در آرایه بر می گرداند. اگر آرگومان در آرایه پیدا نشود، مقدار -1 بر می گرداند:

arr = [ 5 , 2 , 8 , 5 , 6 ];

console.log(arr);

var pos = arr.indexOf(8);

console.log("index of 8 is : " + pos);

var pos1 = arr.indexOf(5);

console.log("index of 5 is : " + pos1);

خروجی کد فوق:

>node indexOf.js

[ 5, 2, 8, 5, 6 ]

index of 8 is : 2

index of 5 is : 0

متد lastIndexOf() در آرایه ها

متد lastIndexOf() همانند indexOf() عمل می کند، با این تفاوت که اندیس آخرین تطابق را در آرایه برمی گرداند. همانند indexOf() اگر تطابقی پیدا نکند، 1- را برمی گرداند.

arr = [ 5 , 2 , 8 , 5 , 6 ];

console.log(arr);

var pos = arr.lastIndexOf(5);

console.log("Last index of 5 is : " + pos);                                

خروجی کد فوق:

>node lastIndexOf.js

[ 5, 2, 8, 5, 6 ]

Last index of 5 is : 3

متد join()  در آرایه ها

متد join عناصر آرایه را به هم می چسباند و یک رشته به ما برمیگرداند. می توانیم یک جداساز دلخواه نیز بعنوان آرگومان بین عناصر ارسال کنیم. جداساز پیش فرض کاما است.

arr = [ 5 , 2 , 8 , 5 , 6 ];

arr1 = ['a','b','c','d'];

console.log(arr);

console.log(arr1);

var str = arr.join();

var str1 = arr1.join(":");

console.log(str);

console.log(str1);                                          

خروجی کد فوق:

>node join.js

[ 5, 2, 8, 5, 6 ]

[ 'a', 'b', 'c', 'd' ]

5,2,8,5,6

a:b:c:d

متد slice() در آرایه ها

متد slice قسمتی از یک آرایه را استخراج و بعنوان یک آرایه جدید بریده و برمی گرداند. این متد دو آرگومان می گیرد: ابتدا و انتها که اگر هر دو از قلم بیافتند، کل آرایه برش خواهد خورد. نحوه نگارش آن بصورت

slice(start, end) است.

  1. start: یک مقدار عددی صحیح که بیان می کند از کجا شروع به برش کند. مقدار پیش فرض 0 است. اگر از قلم بیفتد، مثلا اینطور: slice(,end) مقدار پیش فرض 0 را برای start درنظر می گیرد. می توانیم با دادن مقادیر منفی، از آخر به اول برش بزنیم.
  2. end: این هم یک مقدار عددی صحیح است که مشخص می کند پایان برش کجاست.  اگر از قلم بیفتد، مثلا اینطور: slice(start,)، تا اخرین عنصر برش خواهد خورد. مقادیر منفی برای انتخاب از آخرین عنصر است.

نکته: این متد بر روی آرایه مبدا تغییری نخواهد داد.

arr = [ 5 , 2 , 8 , 5 , 6 ];

arr1 = ['a','b','c','d'];

console.log(arr);

console.log(arr1);

var str = arr.slice(2,4);

var str1 = arr1.slice(-2,-1);

console.log(str);

console.log(str1);

خروجی کد فوق:

>node slice.js

[ 5, 2, 8, 5, 6 ]

[ 'a', 'b', 'c', 'd' ]

[ 8, 5 ]

[ 'c' ]

متد every() در آرایه ها

متد every زمانی به کار می رود که ما بخواهیم بررسی کنیم آیا یک شرط برای تمام عناصر آرایه برقرار است یا خیر. اگر برقرار بود، true و الا false بر میگرداند:

arr = [2,4,6,8,10];

arr1 = [2,3,4,6,8];

function even(value){

    if( (value % 2) == 0){

        return true;

    }else{

        return false;

    }

}


var out = arr.every(even);

var out1 = arr1.every(even);

console.log("Output of array 1 : " + out);

console.log("Output of array 2 :" +out1);                        

خروجی کد فوق:

>node every.js

Output of array 1 : true

Output of array 2 :false

متد filter() در آرایه ها

متد filter برای ایجاد یک آرایه جدید از آرایه فعلی، و پرکردن ان با عناصری که شرط خاصی برایشان برقرار است، به کار می رود. شرط معمولا به کمک یک تابع بیان می شود.

arr = [2,4,6,8,10];

arr1 = [2,3,4,6,8];

function even(value){

    if( (value % 2) == 0){

        return true;

    }else{

        return false;

    }

}


var out = arr.filter(even);

var out1 = arr1.filter(even);

console.log("Output of array 1 : " + out);

console.log("Output of array 2 :" + out1);                               

خروجی کد فوق:

>node filter.js

Output of array 1 : 2,4,6,8,10

Output of array 2 : 2,4,6,8

متد find() در آرایه ها

متد find() اولین عنصر آرایه که شرطی را برقرار کند، برمی گرداند. اگر هیچ عنصری شرط را برقرار نکند، مقدار undefined برمیگرداند:

arr = [2,4,6,8,10];

arr1 = [2,3,4,7,8];

function odd(value){

    if( (value % 2) == 1){

        return true;

    }else{

        return false;

    }

}


var out = arr.filter(odd);

var out1 = arr1.filter(odd);

console.log("Output of array 1 : " + out);

console.log("Output of array 2 :" + out1);

خروجی کد فوق:

>node find.js

Output of array 1 :

Output of array 2 :3,7

متد forEach() در آرایه ها

متد forEach در آرایه ها، درواقع یک حلقه است که یک تابع را برای تک تک عناصر آرایه فراخوانی می کند:

var arr = [1, 2, 3 , 5 , 8];


arr.forEach(function(element) {

    console.log(element*2);

});    


خروجی کد فوق:

>node forEach.js

2
4
6
10
16

متد reduce() در آرایه ها

متد reduce برای تبدیل به یک مقدار ساده به کار می رود. این متد تابع فراهم شده را برای تک تک عناصر اجرا می کند و نتیجه را در یک انباشتگر ذخیره می کند.

نکته: این متد روی آرایه ای که مقداری ندارد، کار نمی کند.

arr = [ 5 , 5 , 8 , 7 , 6 ];

console.log(arr);

function mul(value ,total){

    total = value * total;

    return total;

}

var output = arr.reduce(mul);

console.log("The product of the array is : " + output);

خروجی کد فوق:

>node reduce.js

[ 5, 5, 8, 7, 6 ]

The product of the array is : 8400

خلاصه

در این مقاله ما آرایه ها را بررسی کردیم، چگونه یک آرایه جدید در نود جی اس بسازیم، متدهای مختلفی را همچون push، pop، shift، unshift ، reverse ، sort ، sort ، solice ،concat  ، indexOf ، lastIndexOf  ، join ، slice  ، every ، filter ، find ، forEach ، reduce  و بررسی کردیم و یاد گرفتیم. تمام متدها با مثالهایی توضیح داده شدند.

نویسنده شوید
دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد
24 آذر 1399
سلام. ممنون آموزش خیلی خوب و کاملی بود. ببخشید یه سوال هم داشتم. اگر بخوایم تو خروجی داده های تکراری از آرایه رو نشون نده باید چیکار کنیم؟ مثلا یه آرایه باشه [2،4،2،6،4] و بخوایم خروجیش بشه 2،4،6 و دیگه اون تکراریا رو نشون نده.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

فرید
25 آبان 1397
سلام. در متد find یادتان رفته که filter را با find جایگزین بکنید! و در نتیجه جواب خروجی هم صحیح نمیباشد.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.