ut2
Version:
一个现代 JavaScript 实用工具库。[点击查看在线文档]。
34 lines (31 loc) • 1 kB
JavaScript
import isIndex from './internals/isIndex.js';
import { nativeUndefined } from './internals/native.js';
import isObject from './isObject.js';
import toPath from './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) : nativeUndefined;
if (!isObject(newValue)) {
newValue = isObject(objValue) ? objValue : isIndex(paths[index + 1]) ? [] : {};
}
nested[key] = newValue;
nested = nested[key];
}
}
return object;
}
export { set as default };