1. map, filter, reduce
搭配arrow箭頭函式使用
_.map([1, 2, 3], function
(n) );
// [3, 6, 9]
_.reduce([1, 2, 3], function
(total, n) , 0);
// 6
_.filter([1, 2, 3], function
(n) );
// [1, 2]
// es6寫法
[1, 2, 3].map(n => n * 3);
[1, 2, 3].reduce((total, n) => total + n);
[1, 2, 3].filter(n => n <= 2);
2. head & tail
利用es6中陣列解構獲取list中的頭和尾部
_.head([1, 2, 3, 4]);
// 1
_.tail([1, 2, 3, 4]);
// [2, 3, 4]
// es6寫法
const [head, ...tail] = [1, 2, 3];
同樣可以得到初始元素和最後乙個元素的值
_.initial([1, 2, 3]);
// -> [1, 2]
_.last([1, 2, 3]);
// 3
// es6寫法。陣列解構和陣列reverse反轉
const [last, ...initial] = [1, 2, 3].reverse();
//得到initial -> [2, 1]; last -> 3
在reverse反轉陣列前,利用spread展開操作符來轉殖陣列
// es6寫法。同樣得到上段**的效果
const xs = [1, 2, 3];
const [last, ...initial] = [...xs].reverse();
3. rest & spread
es6中的rest和spread允許我們定義和呼叫接受乙個可變數量的引數的函式。
var say = _.rest(function
(what, names) );
say('hello', 'fred', 'barney', 'pebbles');
// "hello fred, barney, & pebbles"
// es6寫法
const say = (what, ...names) => $ $ $`;
};say('hello', 'fred', 'barney', 'pebbles');
// "hello barney, fred, & pebbles"
4. curry柯里化
函式柯里化是指,把接受多個引數的函式轉換成接受乙個單一引數的函式
function
add(a, b)
var curriedadd = _.curry(add);
var add2 = curriedadd(2);
add2(1);
// 3
// es6寫法
const add = a => b => a + b;
const add2 = add(2);
add2(1);
// 3
5. partial
分步輸入實參
var greet = function
(greeting, name) ;
var sayhelloto = _.partial(greet, 'hello');
sayhelloto('fred');
// "hello fred"
// es6寫法
const sayhelloto = name => greet('hello', name);
sayhelloto('fred');
// "hello fred"
利用reset操作符,分步輸入更多實參
const
sayhelloto = (name, ...args) => greet('hello', name, ...args);
sayhelloto('fred', 1, 2, 3);
//"hello fred"
6. operators
更多可替代操作符
_.eq(3, 3);
// true
_.add(10, 1);
// 11
_.map([1, 2, 3], function
(n) );
// [10, 20, 30]
_.reduce([1, 2, 3], _.add);
// 6
// es6寫法
3 === 3
10 + 1
[1, 2, 3].map(n => n * 10);
[1, 2, 3].reduce((total, n) => total + n);
7. paths
返回object物件中對應的path路徑的值陣列
var object = }, 4] };
_.at(object, ['a[0].b.c', 'a[1]']);
// [3, 4]
_.at(['a', 'b', 'c'], 0, 2);
// ['a', 'c']
// es6寫法
[ obj => obj.a[0].b.c,
obj => obj.a[1]
].map(path => path(object));
[ arr => arr[0],
arr => arr[2]
].map(path => path(['a', 'b', 'c']));
8. pick
挑選物件某些屬性
var
object = ;
return _.pick(object, ['a', 'c']);
// // es6寫法
const = ;
return ;
9. constant, identity, noop
_.constant()();
// _.identity();
// _.noop();
// undefined
內部使用arrow箭頭定義上述函式
const constant = x=>
() => x;
const identity = x=> x;
const
noop = () =>
undefined;
也可以寫成如下
(() => ())();
// (x => x)();
// (() => undefined)();
// undefined
10. chaining & flow
lodash中鏈式寫法替代
_([1, 2, 3])
.tap(function
(array) )
.reverse()
.value();
// [2, 1]
// es6寫法
const pipeline = [
array => ,
array => array.reverse()
];pipeline.reduce( (xs, f) => f(xs), [1, 2, 3]);
使用ES6來代替lodash
map這個應該是用的最多的方法了吧,因為我們幾乎在任何應用中都要做遍歷處理,lodash和es6的使用方式差不多 lodash 的map使用 map 1,2,3,4,5 it it 2 複製 es6的map使用 1,2,3,4,5 map it it 2 複製 你看使用起來是不是一樣啊,非常方便吧,...
ES6系列 詳解ES6中的Map
map類似於物件,都用於儲存key value結構的資料。但是,在傳統的物件上,只能用字串或者symbol來作為鍵名。然而,map與物件最大的差別就在於它可以各種資料型別作為鍵名。map是乙個建構函式,用於例項化例項。const m newmap const o m.set o,content m....
es6 最佳入門實踐 10
generator函式是es6提供的一種非同步程式設計解決方案。在它的內部封裝了多個狀態,因此,又可以理解為一種狀態機,執行generator函式後返回乙個迭代器物件,使用這個迭代器物件可以遍歷出generator函式內部的狀態 generator函式和傳統函式的不同點有 1 函式定義的時候,fun...