Underscore.js詳解第二篇: Arrays

Underscore.js詳解第一篇: Collections後,這是第二篇,Underscore的Array method各個用法如下:

_.first(array, [n]) Alias: head, take
說明:回傳陣列元素值,n為指定回傳幾個
ex.

_.first([5, 4, 3, 2, 1]);
=> 5
_.first([5, 4, 3, 2, 1],3);
=> [5,4,3]


_.initial(array, [n])

說明:類似_.first,只不過從Array的最後一個數回,n為拋棄最後幾個
ex.

_.initial([5, 4, 3, 2, 1]);#未指定n,預設為1
=> [5,4,3,2]
_.initial([5, 4, 3, 2, 1],3);
=> [5,4]

_.last(array, [n])
說明:類似_.first,只不過從Array的最後元素返回,n為保留最後幾個
ex.

_.last([5, 4, 3, 2, 1]);#未指定n,預設為1
=> 1
_.last([5, 4, 3, 2, 1],3);
=> [3,2,1]

_.rest(array, index)
說明:從第index個起,保留後面的全部元素
ex.

_.rest([5, 4, 3, 2, 1]);#未指定index,預設為1
=> [4, 3, 2, 1]
_.rest([5, 4, 3, 2, 1],3);
=> [2,1]

_.compact(array)
說明:Array裡若有0,false,"",NaN,undefined,null,就將之移除
ex.

_.compact([0, 1, false, 2, '', 3]);
=> [1, 2, 3]

_.flatten(array,[shallow])
說明:將一個多個巢狀的多維陣列的所有元素值平坦化為一維陣列,若shallow為true,則只向下平坦化一層
ex.

_.flatten([1, [2], [3, [[4]]]]);
=> [1, 2, 3, 4];
_.flatten([1, [2,['a',['d','c']]], [3, [[4]]]],true);
=> [1, 2, Array[2],3,Array[1]];

_.without(array,[*values])
說明:將指定的value值從Array中移除,values可以指定多個
ex.

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1,2);
=> [3, 4]

_.union(*arrays)
說明:將多個array集合成一個array,只取不重複元素值
ex.

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2, 3, 101, 10]

_.intersection(*arrays)
說明:將多個array集合成一個array,只取每個array都有的元素值
ex.

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2]

_.difference(array,[*values])
說明:類似without,但定義上有點不同,without的定義是將values值從array中剔除,diffrence則是只要values裡面沒有的元素統統回傳
ex.

_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]

_.uniq(array,[isSorted],[iterator]) Alias:unique
說明:把一個array做uniq,若已預先知道array已排序過,則isSorted可以給它true,這樣可以更快一些,若有需要還可以增加callback function
註:若array無排序過但isSorted傳給它true,將會傳回不是你要的結果

_.uniq([1, 2, 1, 3, 1, 4]);
=> [1, 2, 3, 4]

_.zip(*array) 
說明:把每個array的相同index值集合在同一個array,主要用在如果你有相同的index值需要做集合的時候特別有用

_.zip(['moe','larry','curly'], [30, 40, 50], [true, false, false]);
=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]

_.object(list,[values]) 
說明:把array轉換成array,list:values對應key:values

_.object(['moe', 'larry', 'curly'], [30, 40, 50]);
=> {moe: 30, larry: 40, curly: 50}

_.indexOf(array,value,[isSorted]) 
說明:傳回value在array裡的index值,若你知道該array已經排序過isSorted可以給它true,這樣可以執行比較快一點

_.indexOf([1, 2, 3], 2);
=> 1

_.lastIndexOf(array,value,[fromIndex]) 
說明:傳回最後一個value在array裡的index值,fromIndex則可以指定從第幾個index值開始

_.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
=> 4

_.sorteIndex(list,array,[iterator],[context]) 
說明:傳回你要插入的值應該從array的第幾個index開始,iterator可以指定你要以什麼排序

var stooges = [{name :'moe',age: 40}, {name :'curly',age : 60}];
_.sortedIndex(stooges, {name : 'larry', age : 50}, 'age');#以age排序
=> 1

_.sortedIndex([10, 20, 30, 40, 50], 35); 
=> 3

_.range([start],stop,[step]) 
說明:range可以用來製造array,start為第0個值,stop為最終值 ,step為元素隔間值

_.range(10);
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11);
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5);
=> [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1);
=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0);
=> []

以上為underscore.js的arrays全部用法,underscore.js真的是很好用的plugin,可以 讓你的javascript code更簡潔,用更少的code完成更多的事,以上詳解供大家參考。