Lodash中10個可被ES6替代的特性

2021-07-16 06:37:22 字數 4171 閱讀 6869

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...