# baseUnset
# Description
移除 object 对象 path 路径上的属性。
# Params
(object, path)
# Return
Boolean
# Depend
import castPath from './castPath.js'
import last from '../last.js'
import parent from './parent.js'
import toKey from './toKey.js'
# Code
function baseUnset(object, path) {
path = castPath(path, object)
object = parent(object, path)
return object == null || delete object[toKey(last(path))]
}
# Analyze
- 首先将传入的
path
通过castPath
转为 数组 - 通过
parent
拿到path
路径最后一个元素的父级 - 如果拿到的 父级本身就是
null
或者undefined
,则 返回true
- 或者通过
delete
操作符 删除path
数组的最后一个元素,这里通过toKey
做了合规化处理
# Remark
- delete操作符 MDN (opens new window) 对于所有情况都是 true,除非属性是一个自身的 不可配置的属性,在这种情况下,非严格模式返回 false。
- 和 parent 一样,没有对 path 做合法性校验
# Example
const a = {
a: {
b: {
c: 1
}
}
}
console.log(baseUnset(a, 'a.b.d')) // true
console.log(a) // { a: { b: { c: 1 } } }
console.log(baseUnset(a, 'a.b.c')) // true
console.log(a) // { a: { b: {} } }
← baseUniq baseUpdate →