一、_.assign(object, [sources]):對象的合併繼承(不包含原型),後面覆蓋前面的。數組
_.assign({a:1},{a:2},{a:3}) //{a: 3}
相似方法:
_.assignIn(object, [sources]):同樣是合併繼承,它就連原型都一併處理了。其實就是原來的_.extend()方法。
高級方法:
_.assignWith(object, sources, [customizer]):略。
_.assignInWith(object, sources, [customizer]):略。ide
二、_.at(object, [paths]):取出object指定位置的值並組成一個數組。函數
var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; _.at(object, ['a[0].b.c', 'a[1]']); // => [3, 4]
三、_.create(prototype, [properties]):常見一個從原型繼承的對象,並能夠添加本身的屬性。通常用於原型的繼承。this
function Shape() { this.x = 0; this.y = 0; } function Circle() { } Circle.prototype = _.create(Shape.prototype, { 'constructor': Circle }); var circle = new Circle; circle instanceof Circle; // => true circle instanceof Shape; // => true
四、_.defaults(object, [sources]):一樣是繼承合併對象,若是屬性名同樣,只保留最初的值。
相似方法:
_.defaultsDeep(object, [sources]):深合併,遇到嵌套的對象也會逐級對比合並。prototype
_.defaults({ a: {b:2} }, {a: {b:1,c:3} }); // { a:{b: 2} } _.defaultsDeep({ a: {b:2} }, {a: {b:1,c:3} }); // { a:{b: 2, c: 3} }
五、_.findKey(object, [predicate=_.identity]):經過value查找key,僅匹配第一個查詢到的項。code
var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true } }; _.findKey(users, 'active'); // => 'barney'
相似方法:
_.findLastKey(object, [predicate=_.identity]):從後往前匹配。對象
六、_.forIn(object, [iteratee=_.identity]):對象的for in 遍歷,包括原型上的屬性。
_.forInRight(object, [iteratee=_.identity]):反向遍歷。
_.forOwn(object, [iteratee=_.identity]):僅遍歷自身屬性,不包括原型。
_.forOwnRight(object, [iteratee=_.identity]):反向遍歷自身屬性。繼承
function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.forIn(new Foo, (value, key)=> console.log(key)); // a b c _.forInRight(new Foo, (value, key)=> console.log(key)); // c b a _.forOwn(new Foo, (value, key)=> console.log(key)); // a b _.forOwnRight(new Foo, (value, key)=> console.log(key)); // b a
七、_.functions(object):返回對象下可枚舉的方法名稱組成的數組,經過原型繼承的不算。
_.functionsIn(object):同上,經過原型繼承的也算。ci
function Foo() { this.a = function(){}; this.b = function(){}; } Foo.prototype.c = function(){}; _.functions(new Foo); // => ['a', 'b'] _.functionsIn(new Foo); // => ['a', 'b', 'c']
八、_.get(object, path, [defaultValue]):獲取objdect指定路徑的值,若是undefined就返回defalutValue。這個功能感受有點雞肋。get
九、_.has(object, path):檢查 path 是不是object對象的直接屬性。
_.**hasIn**(object, path):
var object = { 'a': { 'b': 2 } }; var other = _.create({ 'a': _.create({ 'b': 2 }) }); _.has(object, 'a.b'); // => true _.has(other, 'a'); // => false _.hasIn(other, 'a'); // => true
十、_.invert(object):這個挺有趣的,把object的key和value對調。
_.**invertBy**(object, [iteratee=_.identity]):自定義迭代函數。
var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invert(object); // => { '1': 'c', '2': 'b' } _.invertBy(object); // => { '1': ["a", "c"], '2': ['b' ]} _.invertBy(object, value => 'group' + value); //=> { 'group1': ["a", "c"], 'group2': ['b' ]}