1. 程式人生 > >Lodash.js測試,陣列(Array.prototype)方法的擴充套件

Lodash.js測試,陣列(Array.prototype)方法的擴充套件

1 Util

  • property propertyOf
let o = {a: {b: {c: 3}}}

// string形式較為明確、靈活
_.property('a.b.c')(o)			// 3, recommendation
_.property(['a', 'b', 'c'])(o)	// 3

// the opposite of property
_.propertyOf(o)('a.b.c')	// 3
_.propertyOf(o)(['a', 'b', 'c'])	// 3

// 注意下面的寫法
_.property('a[b].c')(o)			// 3
_.property
(['a', 'b.c'])(o) // undefined let o = {a: [1, {b: 2}]} _.property('a[1].b')(o) // 2, recommendation _.property('a.1.b')(o) // 2 _.property(['a', '1', 'b'])(o) // 2
  • matchesProperty matches
let objs = {a: {b: 2, c: 3}}

// 深度比較(deep comparation)
_.matchesProperty('a', {b: 2})(o)		// true
_.matches
({b: 2})(o.a) // true
  • property propertyOf matchesProperty matches用法示例
let objs = [{a: 1}, {a: 2, b: 2}, {a: 3}]

_.map(objs, _.property('a'))	// [1, 2, 3]
_.map(objs, 'a')				// 簡寫

_.reject(objs, _.matchesProperty('a', {b: 2}))	// [{a: 1}, {a: 3}]
_.reject(objs, ['a', {b: 2}])					// 簡寫
_.reject
(objs, ['a.b', 2]) // 簡寫 _.reject(objs, _.matches({b: 2})) // [{a: 1}, {a: 3}] _.reject(objs, {b: 2}) // 簡寫

2 Collection

  • map forEach forEachRight
let o = {a: 1, b: 2, c: 3}

// lodash將Arrry的部分方法extend到Object, 返回包含val的Array
// Object: (val, key, obj)相當於Array: (val, idx, arr)
_.map(o, (v, k, o) => k + v)		// ['a1', 'b2', 'c3']

// each eachRight分別是forEach forEachRight的別名
// 輸出: a1 b2
_.forEach(o, (v, k, o) => {
  console.log(k + v)
  return v < 2	// 停止遍歷, 和Array.prototype.forEach不同
})
  • some every filter reject find findLast
let o = {a: 1, b: 2, c: 3}

_.every(o, v => v > 2)		// false
_.some(o, v => v > 2)		// true

_.filter(o, v => v > 2)		// [3]
_.reject(o, v => v > 2)		// [1, 2]

_.find(o, v => v > 1)		// 2
_.findLast(o, v => v > 1)	// 3

let users = {
  'barney':  { 'age': 36, 'active': true },
  'fred':    { 'age': 40, 'active': false },
  'pebbles': { 'age': 32, 'active': true }
}

// 原Arrry.prototype上的方法, 返回Array
// 回撥的arguments是(val, key, obj)
_.every(users, 'active')	// false
_.some(users, 'active')		// true

_.filter(users, ['age', 40])	// [{'age': 40, 'active': false}]
_.filter(users, {'age': 40})	// [{'age': 40, 'active': false}]
_.reject(users, 'active')		// [{'age': 40, 'active': false}]

_.find(users, 'active')			// {'age': 36, 'active': true}
_.findLast(users, 'active')		// {'age': 32, 'active': true}

3 Object

  • findKey findLastKey mapKeys mapValues
let o = {a: 1, b: 2, c: 3}

// lodash為Object提供類似於Array的方法, 回撥的引數是(val, key, obj)
// Object: (val, key, obj)相當於Array: (val, idx, arr)
_.findKey(o, v => v > 1)		// 'b'
_.findLastKey(o, v => v > 1)	// 'c'

_.mapKeys(o, (v, k) => k + v)	// {a1: 1, b2: 2, c3: 3}
_.mapValues(o, v => v + 1)		// {a: 2, b: 3, c: 4}