ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
36 lines (32 loc) • 1.02 kB
JavaScript
;
var isIndex = require('./internals/isIndex.js');
var native = require('./internals/native.js');
var isObject = require('./isObject.js');
var toPath = require('./toPath.js');
function set(object, path, value, customizer) {
if (!isObject(object)) {
return object;
}
var paths = toPath(path, object);
var length = paths.length;
var lastIndex = length - 1;
var index = -1;
var nested = object;
while (++index < length) {
var key = paths[index];
if (index === lastIndex) {
nested[key] = value;
}
else {
var objValue = nested[key];
var newValue = customizer ? customizer(objValue, key, nested) : native.nativeUndefined;
if (!isObject(newValue)) {
newValue = isObject(objValue) ? objValue : isIndex(paths[index + 1]) ? [] : {};
}
nested[key] = newValue;
nested = nested[key];
}
}
return object;
}
module.exports = set;