幾種需要注意的陣列方法

2022-07-14 08:30:14 字數 4395 閱讀 1592

concat

arr.concat建立乙個新陣列,其中包含來自於其他陣列和其他項的值

arr.concat(arg1, arg2, ...)
接受任意數量的引數,包括陣列或值

例子:

let arr = [1, 2];

alert( arr.concat([3, 4]) );//1,2,3,4

alert( arr.concat([3, 4], [5, 6]) );//1,2,3,4,5,6

alert( arr.concat([3, 4], 5, 6) );//1,2,3,4,5,6

通常,它只複製陣列中的元素。其他物件,即使它們看起來像陣列一樣,但仍然會被作為乙個整體新增:

let arr = [1, 2];

let arraylike = ;

alert( arr.concat(arraylike) ); // 1,2,[object object]

但是,如果類似陣列的物件具有symbol.isconcatspreadable屬性,那麼它就會被concat當作乙個陣列來處理:此物件中的元素將被新增:

let arr = [1, 2];

let arraylike = ;

alert( arr.concat(arraylike) ); // 1,2,something,else

arr.foreach方法允許為陣列的每個元素都執行乙個函式。

arr.foreach(function(item, index, array) );
例子:

// 對每個元素呼叫 alert

["aa", "bb", "bb"].foreach(alert);

而這段**更詳細地介紹了它們在目標陣列中的位置:

["aa", "bb", "cc"].foreach((item, index, array) =>  is at index $ in $`);

});

該函式的結果(如果它有返回)會被拋棄和忽略。

let results = arr.filter(function(item, index, array) );
例子:

let users = [

, ,

];// 返回前兩個使用者的陣列

let someusers = users.filter(item => item.id < 3);

alert(someusers.length); // 2

arr.sort方法對陣列進行原位(in-place)排序,更改元素的順序。(譯註:原位是指在此陣列內,而非生成乙個新陣列。)

它還返回排序後的陣列,但是返回值通常會被忽略,因為修改了arr本身。

let arr = [ 1, 2, 15 ];

// 該方法重新排列 arr 的內容

arr.sort();

alert( arr ); // 1, 15, 2

這些元素預設情況下被按字串進行排序。

從字面上看,所有元素都被轉換為字串,然後進行比較。對於字串,按照詞典順序進行排序,實際上應該是"2" > "15"

要使用我們自己的排序順序,我們需要提供乙個函式作為arr.sort()的引數。

function comparenumber(a, b) 

let arr = [ 1, 2, 15 ];

arr.sort(comparenumber);

alert(arr); // 1, 2, 15

簡化後:

let arr = [ 1, 2, 15 ];

arr.sort(function(a, b) );

alert(arr); // 1, 2, 15

使用箭頭函式:

arr.sort( (a, b) => a - b );
對於許多字母,最好使用str.localecompare方法正確地對字母進行排序:

let countries = ['österreich', 'andorra', 'vietnam'];

alert( countries.sort( (a, b) => a > b ? 1 : -1) ); // andorra, vietnam, österreich(錯的)

alert( countries.sort( (a, b) => a.localecompare(b) ) ); // andorra,österreich,vietnam(對的!)

當我們需要遍歷乙個陣列時 —— 我們可以使用foreachforfor..of

當我們需要遍歷並返回每個元素的資料時 —— 我們可以使用map

arr.reduce方法和arr.reduceright方法和上面的種類差不多,但稍微複雜一點。它們用於根據陣列計算單個值。

語法是:

let value = arr.reduce(function(accumulator, item, index, array) , [initial]);
該函式乙個接乙個地應用於所有陣列元素,並將其結果「搬運(carry on)」到下乙個呼叫。

引數:因此,第乙個引數本質上是累加器,用於儲存所有先前執行的組合結果。最後,它成為reduce的結果。

例子,我們通過一行**得到乙個陣列的總和:

let arr = [1, 2, 3, 4, 5];

let result = arr.reduce((sum, current) => sum + current, 0);

alert(result); // 15

傳遞給reduce的函式僅使用了 2 個引數,通常這就足夠了。

sum

current

result

第 1 次呼叫

0

1

1

第 2 次呼叫

1

2

3

第 3 次呼叫

3

3

6

第 4 次呼叫

6

4

10

第 5 次呼叫

10

5

15

我們也可以省略初始值:

let arr = [1, 2, 3, 4, 5];

// 刪除 reduce 的初始值(沒有 0)

let result = arr.reduce((sum, current) => sum + current);

alert( result ); // 15

結果是一樣的。這是因為如果沒有初始值,那麼reduce會將陣列的第乙個元素作為初始值,並從第二個元素開始迭代。

計算表與上面相同,只是去掉第一行。

但是這種使用需要非常小心。如果陣列為空,那麼在沒有初始值的情況下呼叫reduce會導致錯誤。

例如:

let arr = ;

// error: reduce of empty array with no initial value

// 如果初始值存在,則 reduce 將為空 arr 返回它(即這個初始值)。

arr.reduce((sum, current) => sum + current);

所以建議始終指定初始值。

arr.reducerightarr.reduce方法的功能一樣,只是遍歷為從右到左。

JS陣列的需要注意的問題

一 在js中陣列是我們經常使用的資料型別,也為我們提供了很多方法。但是有些方法需要注意使用 1 indexof args 匹配乙個陣列中與args相等的項的索引位置,如果該陣列包含這個匹配項則返回第乙個匹配的索引,並停止匹配。匹配不到返回 1。1 只匹配第乙個元素的索引。2 匹配使用的全等即 即不會...

需要注意的問題

決策樹id3和c4.5的差別?各自優點?boost演算法 cart 回歸樹用平方誤差最小化準則,分類樹用基尼指數最小化準則 gbdt與隨機森林演算法的原理以及區別。優化演算法中常遇到的kkt條件?作用是?最近鄰演算法knn 分類與回歸 l1和l2函式?l1和l2正則項的比較,如何解決 l1 求導困難...

const需要注意的

1.對於函式後邊新增const後,函式成為const型別,該函式中不允許對類中成員進行修改,可以認為是在該函式中,類成為了const型別。另外要注意的是,const函式中只能呼叫const型別的函式。2.對於const型別的變數來說,只能把const的賦值給非const,不能把非const賦值給co...