# **Lodash (Array Methods)**
## _.chunk(array, [size=1])
返回一個元素陣列,按大小的長度分成多個組。 如果陣列不能均勻分割,則最後的塊將是剩餘的元素。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d','e'];
let arr2 = _.chunk(arr1, 2);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.compact(array)
返回一個刪除所有 falsey 值的陣列。 false、null、0、""、undefined 和 NaN 是 falsey。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','','b',0,'c'];
let arr2 = _.compact(arr1);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.concat(array, [values])
返回一個陣列,將陣列與任何其他陣列或值連接起來。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b'];
let arr2 = ['c','d','e'];
let arr3 = _.concat(arr1,arr2);
console.log("arr1",arr1);
console.log("arr2",arr2);
console.log("arr3",arr3);
```
* 結果

## _.difference(array, [values])
將陣列中的元素與values中的元素做對比,去掉相同的元素,剩下的元素組成的陣列即為返回值。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = ['a','c','e'];
let arr3 = _.difference(arr1,arr2);
console.log("arr1",arr1);
console.log("arr2",arr2);
console.log("arr3",arr3);
```
* 結果

## _.drop(array, [n=1])
返回一個從頭刪除n個元素的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = _.drop(arr1,2)
console.log("arr1",arr1)
console.log("arr2",arr2)
```
* 結果

## _.fill(array, value, [start=0], [end=array.length])
將陣列中從start位置到(end-1)位置的元素用value填入。**(會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
console.log("arr1",arr1);
_.fill(arr1,'x');
console.log("arr1",arr1);
let arr2 = ['a','b','c','d'];
console.log("arr2",arr2);
_.fill(arr2,'y',1,3);
console.log("arr2",arr2);
```
* 結果

## _.flattenDeep(array)
遞迴展平陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a',['b','c',['d','e','f']],'g'];
let arr2 = _.flattenDeep(arr1);
console.log("arr1",arr1)
console.log("arr2",arr2)
```
* 結果

## _.fromPairs(pairs)
返回由鍵值對組成的物件。**(不會改變原始陣列)**
* 範例
```
let arr1 = [["name","john"],["age",20]];
let obj1 = _.fromPairs(arr1);
console.log("arr1",arr1);
console.log("obj1",obj1);
```
* 結果

## _.head(array)
返回陣列中第一個元素。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let val = _.head(arr1);
console.log("arr1",arr1);
console.log("val",val);
```
* 結果

## _.initial(array)
返回除了最後一個元素外組成的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = _.initial(arr1);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.intersection([arrays])
返回一個所有陣列都包含之元素的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = ['a','c','e'];
let arr3 = _.intersection(arr1,arr2);
console.log("arr1",arr1);
console.log("arr2",arr2);
console.log("arr3",arr3);
```
* 結果

## _.join(array, [separator=','])
將陣列中的所有元素轉換為由分隔符分隔的字符串。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let str1 = _.join(arr1,"~");
console.log("arr1",arr1);
console.log("str1",str1);
```
* 結果

## _.last(array)
返回陣列中最後一個元素。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let val = _.last(arr1);
console.log("arr1",arr1);
console.log("val",val);
```
* 結果

## _.nth(array, [n=0])
獲取數組索引 n 處的元素。 如果 n 為負,則返回從末尾開始的第 n 個元素。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let val1 = _.nth(arr1,2);
let val2 = _.nth(arr1,-1);
console.log("arr1",arr1);
console.log("val1",val1);
console.log("val2",val2);
```
* 結果

## _.pull(array, [values])
將陣列中所有特定值刪除。**(會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','a','c'];
console.log("arr1",arr1);
_.pull(arr1,'a');
console.log("arr1",arr1);
```
* 結果

## _.pullAll(array, values)
此方法類似於 _.pull,不同之處在於它接受要刪除的值陣列。**(會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','a','c','d'];
console.log("arr1",arr1);
_.pullAll(arr1,['a','c']);
console.log("arr1",arr1);
```
* 結果

## _._remove(array, [predicate=_.identity])
從陣列中刪除返回truthy的所有元素,並返回已刪除元素的陣列。**(會改變原始陣列)**
* 範例
```
let arr1 = [ 1 , 2 , 3 , 4 , 5 ];
console.log("arr1",arr1);
arr1 = _.remove(arr1, n =>{
return n % 2 == 0;
})
console.log("arr1",arr1);
```
* 結果

## _._reserve(array, [predicate=_.identity])
反轉陣列。**(會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
console.log("arr1",arr1);
_.reverse(arr1);
console.log("arr1",arr1);
```
* 結果

## _.sortedIndex(array, value)
使用二進制搜索來確定應將值插入陣列以保持其排序順序的最低索引。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','d','e'];
console.log("arr1",arr1);
console.log(_.sortedIndex(arr1,'c'));
```
* 結果

## _.tail(array)
返回除了第一個元素外組成的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = _.tail(arr1);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.take(array, [n=1])
返回一個從頭取n個元素組成的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = _.take(arr1,2);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.union([arrays])
從所有給定陣列中按順序創建唯一值陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = ['a','c','e'];
let arr3 = _.union(arr1,arr2);
console.log("arr1",arr1);
console.log("arr2",arr2);
console.log("arr3",arr3);
```
* 結果

## _.uniq(array)
創建一個無重複版本的陣列,其中只保留每個元素的第一次出現。 結果值的順序由它們在陣列中出現的順序決定。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','a','c','d','c','e'];
let arr2 = _.uniq(arr1);
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.without(array, [values])
返回一個排除所有給定值的陣列。**(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = _.without(arr1,'b','c');
console.log("arr1",arr1);
console.log("arr2",arr2);
```
* 結果

## _.zip([arrays])
返回一個分組元素陣列,其中第一個包含給定陣列的第一個元素,第二個包含給定陣列的第二個元素,依此類推。 **(不會改變原始陣列)**
* 範例
```
let arr1 = ['a','b','c','d'];
let arr2 = [ 1 , 2 , 3 ];
let arr3 = [true,false];
let arr4 = _.zip(arr1,arr2,arr3)
console.log("arr1",arr1);
console.log("arr2",arr2);
console.log("arr3",arr3);
console.log("arr4",arr4);
```
* 結果
