Javascript 使用lodash在深路径处创建空对象
我需要在深路径上创建一个空对象,但前提是它不存在,并返回对该对象的引用 这可以通过使用Javascript 使用lodash在深路径处创建空对象,javascript,lodash,Javascript,Lodash,我需要在深路径上创建一个空对象,但前提是它不存在,并返回对该对象的引用 这可以通过使用.has,.set然后使用.get let path = 'some.deep.path'; if (!_.has(object, path)) { _.set(object, path, {}); } let descendant = _.get(object, path); 相反,我希望避免重复对象,路径(或者引入路径变量以避免重复路径值) 我想知道是否有一种不用额外函数/库就可以做到这一点的
.has
,.set
然后使用.get
let path = 'some.deep.path';
if (!_.has(object, path)) {
_.set(object, path, {});
}
let descendant = _.get(object, path);
相反,我希望避免重复对象
,路径
(或者引入路径
变量以避免重复路径
值)
我想知道是否有一种不用额外函数/库就可以做到这一点的方法
接受或处理路径的lodash方法的列表。按字母顺序 这包括处理数组/集合并接受
.property
迭代对象/谓词速记的方法,即当字符串作为参数提供时,它被传递给.property
方法,该方法创建一个函数,返回给定对象路径上的值(这是由主函数给出的,例如,\uuu.map
)
阵列
- v4.0.0(数组,[value],[iteratee=\uu0.identity])
- v3.0.0(数组,[predicate=..identity])
- v3.0.0(数组,[predicate=..identity])
- v1.1.0(数组,[predicate=..identity],[fromIndex=0])
- v2.0.0(数组,[predicate=551;.identity],[fromIndex=array.length-1])
- v4.0.0([arrays],[iteratee=\u0.identity])
- v4.0.0(数组,值,[iteratee=..identity])
- v4.0.0(数组,值,[iteratee=..identity])
- v3.0.0(数组,[predicate=..identity])
- v3.0.0(数组,[predicate=..identity])
- v4.0.0([arrays],[iteratee=\u0.identity])
- v4.0.0(数组,[iteratee=..identity])
- v4.0.0([arrays],[iteratee=\u0.identity])
- v4.1.0([props=[]],[values=[]])
- v0.5.0(集合,[iteratee=u2;.identity])
- v0.1.0(集合,[predicate=.[identity])
- v0.1.0(集合,[predicate=.[identity])
- v0.1.0(集合,[predicate=.[identity])
- v0.1.0(集合,[iteratee=u2;.identity])
- v4.0.0(集合,路径,[args])
- v0.1.0(集合,[iteratee=u2;.identity])
- v3.0.0(集合,[predicate=\u0.identity])
- v0.1.0(集合,[iteratee=u2;.identity])
- v0.1.0(集合,[iteratee=u2;.identity])
- v4.0.0(数组,[iteratee=..identity])
- v4.7.0(数组,[iteratee=..identity])
- v4.0.0(数组,[iteratee=..identity])
- v4.0.0(数组,[iteratee=..identity])
- v1.0.0(对象,[路径])
- v1.1.0(对象,[谓词=\标识])
- v2.0.0(对象,[predicate=.\ux.identity])
- v3.7.0(对象、路径,[defaultValue])
- v0.1.0(对象、路径)
- v4.0.0(对象、路径)
- v4.0.0(对象、路径、[args])
- v2.4.0(对象,[iteratee=u2;.identity])
- v0.1.0(对象,[路径])
- v0.1.0(对象,[路径])
- v0.1.0(对象,路径,[defaultValue])
- v3.7.0(对象、路径、值)
- v4.0.0(对象、路径、值,[自定义程序])
- v4.0.0(对象、路径)
- v4.6.0(对象、路径、更新程序)
- v4.6.0(对象、路径、更新程序[自定义程序])
- v4.0.0([func=..identity])
- v3.2.0(路径、值)
- v3.7.0(路径,[args])
- v3.7.0(对象,[args])
- v2.4.0(路径)
- v3.0.0(对象)
- v4.0.0(值)
_(value).chained().method().value();
- v1.0.0([路径])
方法。deepDefault
方法返回一个引用:
var descendant = _.deepDefault(object, 'some.deep.path', {});
添加自定义lodash mixin函数:
function getDefault(object, path, defaultValue) {
var descendant = _.get(object, path);
if (typeof descendant === 'undefined') {
_.set(object, path, defaultValue);
}
return descendant;
}
_.mixin({ 'getDefault': getDefault });
_.getDefault(object, '.some.deep.path', {});
您可以通过以下方法避免出现
\uhas
:
var path = 'some.deep.path',
descendant = _.get(object, path);
if (!descendant) {
descendant = {};
_.set(object, path, descendant);
}
因此,只需遍历路径2次,而不是3次。这样如何:
function getDefault(obj, path, defaultValue) {
_.update(obj, path, d => d ? d : {})
return _.get(obj, path);
}
如果路径不存在,它将被创建,否则不会更改。
仍然不确定如何避免使用get。现在您可以使用u.setWith
setWith({}, "some.deep.path", value, Object);
返回
{some:{deep:{path:4}}
如果路径包含数字键,则不起作用:var path='some.22.11'