midash API

Object

get

获取 object 的嵌套属性。

const object = { a: [{ b: 3 }] }
 
// => 3
_.get(object, 'a[0].b')
 
// => 3
_.get(object, ['a', '0', 'b'])
 
// => 'default'
_.get(object, 'a.b.c', 'default')

omit

忽略 object 的某些属性,并返回新的 object

注意

midash 中无法使用 _.omit(object, 'a', 'b'),请使用 _.omit(object, ['a', 'b']) 替代。

const object = {
  a: 3,
  b: 4,
  c: 5
}

//=> { c: 5 }
_.omit(object, ['a', 'b'])

omitBy

通过函数忽略 object 的某些属性,并返回新的 object

const object = {
  a: 3,
  b: 4,
  c: 5
}

// 通过 value 进行筛选忽略
//=> { b:4, c: 5 }
_.omitBy(object, value => value === 3)

// 通过 key 进行筛选忽略
//=> { b:4, c: 5 }
_.omitBy(object, (value, key) => key === 'a')

pick

选择 object 的某些属性,并返回新的 object

注意

midash 中无法使用 _.pick(object, 'a', 'b'),请使用 _.pick(object, ['a', 'b']) 替代。

const object = {
  a: 3,
  b: 4,
  c: undefined
}

//=> { a: 3, b: 4 }
_.pick(object, ['a', 'b'])

//=> {}
_.pick(object, ['z'])

//=> { c: undefined }
_.pick(object, ['c'])

pickBy

通过函数选择 object 的某些属性,并返回新的 object

const object = {
  a: 3,
  b: 4,
}

//=> { a: 3 }
_.pickBy(object, value => value === 3)

//=> { a: 3 }
_.pickBy(object, (value, key) => key === 'a')

defaults

//=> { mode: 'development', sourcemap: true, devtool: true }
_.defaults({
  mode: 'development',
  sourcemap: true
}, {
  mode: 'production',
  devtool: true
})

clone

浅拷贝对象属性

const o = { a: { aa: 3 }, b: 4 }

//=> true
_.clone(o).a === o.a

cloneDeep

递归拷贝对象属性

const o = { a: { aa: 3 }, b: 4 }

//=> false
_.cloneDeep(o).a === o.a

merge

递归合并所有对象的属性至第一参数对象中,并返回新的对象。

//=> { a: 4, b: 2 }
merge({ a: 1 }, { b: 2 }, { a: 3 }, { a: 4 })

assign

分配来源对象的可枚举属性到目标对象上。 来源对象的应用规则是从左到右,随后的下一个对象的属性会覆盖上一个对象的属性。

// => { a: 1, b: 3, c: 5, d: 6 }
_.assign({ a: 1, b: 2 }, { b: 3, c: 4 }, { c: 5, d: 6 })

Array

chunk

对数组按照 size 进行分组。

//=> [[0, 1, 2], [3, 4, 5]]
_.chunk([0, 1, 2, 3, 4, 5], 3)

//=> [[0], [1], [2]]
_.chunk([0, 1, 2])

//=> [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]
_.chunk('abcdefghi', 3)

sample

从一个数组中随机获取值。

// get a random element from [0, 3, 6, 10]
_.sample([0, 3, 6, 10])

//=> undefined
_.sample([])

sampleSize

从一个数组中随机获取 n 个值。

//=> Maybe [1, 2]
_.sampleSize([1, 2, 3], 2)
 
//=> [1, 2, 3]
_.sampleSize([1, 2, 3], 4)

difference/differenceBy

提示

midash 中,differenceBydifference 的别名。

//=> [2, 4]
difference([1, 2, 3, 4], [1, 3, 5])

//=> [{ a: 4 }]
differenceBy([{ a: 3 }, { a: 4 }], [{ a: 3 }], x => x.a)

shuffle

uniq

keyBy

根据条件生成键,并对数组转化为对象。

const list = [
  { id: 1, name: 'hello' },
  { id: 2, name: 'world' },
]

//=> { '1': { id: 1, name: 'hello' }, '2', { id: 2, name: 'world' } }
_.keyBy(list, x => id)

groupBy

根据条件对数组进行分组。

//=> { '3': ['one', 'two'], '5': ['three'] }
_.groupBy(['one', 'two', 'three'], x => x.length)

get

compact

过滤掉数组中的假值( falseundefinednull''0), 并返回新数组。

_.compact([1, 0, 2, false]) // [1, 2]

_.compact({}, undefined, null, 3) // [{}, 3]

_.compact(["a", "b", "c", "", "d"]) // ["a", "b", "c", "d"]

zip

创建一个分组元素的数组,数组的第一个元素包含所有给定数组的第一个元素,数组的第二个元素包含所有给定数组的第二个元素,以此类推。

// => [[1, 'a', true],[2, 'b', false],[3, 'c', undefined]];
_.zip([1, 2, 3], ['a', 'b', 'c'], [true, false]);

// => [[undefined, 1], [undefined, 2], [undefined, 3]];
_.zip([],[1, 2, 3])

// => [[1, 'a', undefined], [2, 'b', undefined],[undefined, 'c', undefined]];
_.zip([1, 2], ['a', 'b', 'c'], [])

unzip

这个方法类似于_.zip,除了它接收分组元素的数组,并且创建一个数组,分组元素到打包前的结构。(:返回数组的第一个元素包含所有的输入数组的第一元素,第一个元素包含了所有的输入数组的第二元素,依此类推。)

// => [[1, 2, 3], ['a', 'b', 'c'], [true, false, true]]
_.unzip([[1, 'a', true], [2, 'b', false], [3, 'c', true]])

// => []
_.unzip([])

// => [[1, 2, 4], ['a', 'b', 'c'], [undefined, 3, undefined]]
_.unzip([[1, 'a'], [2, 'b', 3], [4, 'c']])

mapKeys

//=> { a3: 3, b4: 4 }
mapKeys({ a: 3, b: 4 }, (v, k) => `${k}${v}`)

mapValues

//=> { a: 4, b: 5 }
mapValues({ a: 3, b: 4 }, (v) => v + 1)

String

camelCase

snakeCase

kebabCase

String

Number

random

获取一个随机整数

// 10 到 20 之间的一个随机整数,闭区间,包括 10 与 20
_.random(10, 20)

// 0 到 20 之间的一个随机整数
_.random(20)

// 0 到 1 之间的一个随机整数
_.random()

Lang

castArray

如果 value 不是数组, 那么强制转为数组。

_.castArray(1);
// => [1]
 
_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]
 
_.castArray('abc');
// => ['abc']
 
_.castArray(null);
// => [null]
 
_.castArray(undefined);
// => [undefined]
 
_.castArray();
// => []
 
const array = [1, 2, 3];
console.log(_.castArray(array) === array);
// => true

isArray

//=> true
_.isArray([])

isObject

//=> true
_.isObject({})

//=> true
_.isObject([])

//=> true
_.isObject(x => {})

isPlainObject

//=> true
_.isPlainObject({})

//=> true
_.isPlainObject(Object.create(null))

//=> false
_.isPlainObject(new Date())

isPromise

//=> true
_.isPromise(Promise.resolve())

isTypedArray

//=> true
_.isTypedArray(new Uint8Array([1, 2, 3]))

isEqual

Util

compose/flowRight

从右至左执行函数,并将上一个函数的返回值作为下一个函数的参数。flowRightcompose 的别名。

const double = x => x * 2
const square = x => x * x

//=> 200
_.compose(double, square)(10)
_.flowRight(double, square)(10)

property

创建一个返回给定对象的 path 的值的函数。

const objects = [
  { 'a': { 'b': 2 } },
  { 'a': { 'b': 1 } }
];
// => [2, 1]
_.map(objects, _.property('a.b'));

// => [1, 2]
_.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');

range

获取序列数组。

//=> [0, 1, 2, 3]
range(4)

//=> [0, -1, -2, -3]
range(-4)

//=> [1, 2, 3, 4]
range(1, 5)

//=> [5, 4, 3, 2]
range(5, 1)

//=> [0, -1, -2, -3]
range(0, -4, -1)

once

只会调用一次的函数。

// `initialize` 只能调用 `createApplication` 一次。
const initialize = _.once(createApplication);
initialize();
initialize();

memoize

创建一个会缓存 func 结果的函数。

const object = { 'a': 1, 'b': 2 };
const other = { 'c': 3, 'd': 4 };

// => [1, 2]
const values = memoize(Object.values,);
values(object);

// => [3, 4]
values(other);

object.a = 2;
// => [1, 2]
values(object);

Math

sum

max

获取数字数组中最大的值。如果数组为空或者不存在,则返回 undefined

提示

midash 中,maxBymax 的别名。

// => 5
_.max([-5, -3, 0, 3, 5])

// => { a: 4 }
_.maxBy([
  { a: 3 },
  { a: 4 }
], x => x.a)

min

获取数字数组中最小的值。如果数组为空或者不存在,则返回 undefined

提示

midash 中,minBymin 的别名。

// => -5
_.min([-5, -3, 0, 3, 5])

// => { a: 3 }
_.minBy([
  { a: 3 },
  { a: 4 }
], x => x.a)