大家好,我是林三心,用最通俗易懂的話講最難的知識點是我的座右銘,基礎(chǔ)是進(jìn)階的前提是我的初心。
事情起因是,有幾個小伙伴在對一個數(shù)據(jù)進(jìn)行排序,做了激烈的討論,這組數(shù)據(jù),想要根據(jù)num字段進(jìn)行排序~把我氣的,你們就不能直接用lodash的sortBy嗎?你們再怎么實現(xiàn),能實現(xiàn)得比lodash好?
const arr = [ {num: 3,name: 'hh'}, {num: 1,name: 'xx'}, {num: 2,name: 'aa'}]// 使用lodashconsole.log(_.sortBy(arr, ['num']))
所以,我覺得有必要跟各位小伙伴分享一下,我在項目中用的最多的30個lodash工具方法
注:此文是總結(jié)一些常用的lodash方法,案例從文檔拿的,介意的朋友請勿看~
返回一個包含所有傳入數(shù)組交集元素的新數(shù)組。
_.intersection([2, 1], [4, 2], [1, 2]); // => [2]
根據(jù)某個字段來進(jìn)行計算交集
_.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); // => [{ 'x': 1 }]
根據(jù)某個條件函數(shù)來計算交集,比如使用isEqual
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; _.intersectionWith(objects, others, _.isEqual); // => [{ 'x': 1, 'y': 2 }]
返回一個新的聯(lián)合數(shù)組。
_.union([2], [1, 2]); // => [2, 1]
根據(jù)某個字段來計算合集
_.unionBy([{ 'x': 1, 'y': 5 }], [{ 'x': 2, 'y': 3 }, { 'x': 1, 'y': 6 }], 'x'); // => [{ 'x': 1, 'y': 5 }, { 'x': 2, 'y': 3 }]
根據(jù)某個條件函數(shù)來計算合集
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; _.unionWith(objects, others, _.isEqual); // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
同上面兩種工具函數(shù),這里無需多言~
返回總和。
_.sum([4, 2, 8, 6]); // => 20
根據(jù)某個字段計算并返回總和。
var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; _.sumBy(objects, function(o) { return o.n; }); // => 20 // The `_.property` iteratee shorthand. _.sumBy(objects, 'n'); // => 20
計算平均數(shù)
_.mean([4, 2, 8, 6]); // => 5
根據(jù)某個字段計算出平均值
var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; _.meanBy(objects, function(o) { return o.n; }); // => 5 // The `_.property` iteratee shorthand. _.meanBy(objects, 'n'); // => 5
var users = [ { 'user': 'fred', 'age': 48 }, { 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }, { 'user': 'barney', 'age': 34 } ]; _.sortBy(users, function(o) { return o.user; }); // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] _.sortBy(users, ['user', 'age']); // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] _.sortBy(users, 'user', function(o) { return Math.floor(o.age / 10); }); // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
const obj1 = [{a: 1 }]const obj2 = _.clone(obj1)console.log(obj1 === obj2) // falseconsole.log(obj1.a === obj2.a) // true
const obj1 = [{a: 1 }]const obj2 = _.cloneDeep(obj1)console.log(obj1 === obj2) // falseconsole.log(obj1.a === obj2.a) // false
(Function)
// 避免窗口在變動時出現(xiàn)昂貴的計算開銷。jQuery(window).on('resize', _.debounce(calculateLayout, 150)); // 當(dāng)點擊時 `sendMail` 隨后就被調(diào)用。jQuery(element).on('click', _.debounce(sendMail, 300, { 'leading': true, 'trailing': false})); // 確保 `batchLog` 調(diào)用1次之后,1秒內(nèi)會被觸發(fā)。var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });var source = new EventSource('/stream');jQuery(source).on('message', debounced); // 取消一個 trailing 的防抖動調(diào)用jQuery(window).on('popstate', debounced.cancel);
(Function)
// 避免在滾動時過分的更新定位jQuery(window).on('scroll', _.throttle(updatePosition, 100)); // 點擊后就調(diào)用 `renewToken`,但5分鐘內(nèi)超過1次。var throttled = _.throttle(renewToken, 300000, { 'trailing': false });jQuery(element).on('click', throttled); // 取消一個 trailing 的節(jié)流調(diào)用。jQuery(window).on('popstate', throttled.cancel);
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']); // => { 'a': 1, 'c': 3 }
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omit(object, ['a', 'c']); // => { 'b': '2' }
如果 value 是 undefined ,那么返回 true,否則返回 false
_.isUndefined(undefined); // => true _.isUndefined(null); // => false
如果 value 為null,那么返回 true,否則返回 false。
_.isNull(null); // => true _.isNull(undefined); // => false
如果 value 為一個字符串,那么返回 true,否則返回 false。
_.isString('abc'); // => true _.isString(1); // => false
如果 value 為一個普通對象,那么返回 true,否則返回 false。
function Foo() { this.a = 1; } _.isPlainObject(new Foo); // => false _.isPlainObject([1, 2, 3]); // => false _.isPlainObject({ 'x': 0, 'y': 0 }); // => true _.isPlainObject(Object.create(null)); // => true
如果 value 為一個數(shù)值,那么返回 true,否則返回 false。
_.isNumber(3); // => true _.isNumber(Number.MIN_VALUE); // => true _.isNumber(Infinity); // => true _.isNumber('3'); // => false
如果value是一個數(shù)組返回 true,否則返回 false。
_.isArray([1, 2, 3]); // => true _.isArray(document.body.children); // => false _.isArray('abc'); // => false _.isArray(_.noop); // => false
如果 value 是一個布爾值,那么返回 true,否則返回 false。
_.isBoolean(false); // => true _.isBoolean(null); // => false
如果 value 是一個函數(shù),那么返回 true,否則返回 false。
_.isFunction(function(){}); // => true _.isFunction(''); // => false
如果 value 為null 或 undefined,那么返回 true,否則返回 false。
_.isNil(null); // => true _.isNil(void 0); // => true _.isNil(NaN); // => fals
本文鏈接:http://www.www897cc.com/showinfo-26-86206-0.html你還在用sort排序?分享30個用的最頻繁的lodash工具函數(shù)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 探索MVVM Toolkit:簡化.NET應(yīng)用開發(fā),構(gòu)建高效MVVM架構(gòu)