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(對的!)
當我們需要遍歷乙個陣列時 —— 我們可以使用foreach
,for
或for..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.reduceright
和arr.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...