mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 14:37:49 +00:00
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
import eq from './eq.js'
|
|
|
|
/** Used for built-in method references. */
|
|
const objectProto = Object.prototype
|
|
|
|
/** Used to check objects for own properties. */
|
|
const hasOwnProperty = objectProto.hasOwnProperty
|
|
|
|
/**
|
|
* Assigns own and inherited enumerable string keyed properties of source
|
|
* objects to the destination object for all destination properties that
|
|
* resolve to `undefined`. Source objects are applied from left to right.
|
|
* Once a property is set, additional values of the same property are ignored.
|
|
*
|
|
* **Note:** This method mutates `object`.
|
|
*
|
|
* @since 0.1.0
|
|
* @category Object
|
|
* @param {Object} object The destination object.
|
|
* @param {...Object} [sources] The source objects.
|
|
* @returns {Object} Returns `object`.
|
|
* @see defaultsDeep
|
|
* @example
|
|
*
|
|
* defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 })
|
|
* // => { 'a': 1, 'b': 2 }
|
|
*/
|
|
function defaults(object, ...sources) {
|
|
object = Object(object)
|
|
sources.forEach((source) => {
|
|
if (source != null) {
|
|
source = Object(source)
|
|
for (const key in source) {
|
|
const value = object[key]
|
|
if (value === undefined ||
|
|
(eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
|
object[key] = source[key]
|
|
}
|
|
}
|
|
}
|
|
})
|
|
return object
|
|
}
|
|
|
|
export default defaults
|