基于文件路径字符串创建对象
Create an object based on file path string
给定路径"documents/settings/user"
如何将其制成嵌套对象
结果
{
documents : {
settings : {
user : {}
}
}
}
我想不出如何引用以前的每条路径
var dir = {};
var paths = "documents/settings/user".split('/')
for (var i = 0; i < paths.length; i++) {
var path = paths[i];
if(i === 0)
dir[path] = {};
//else
//dir[path[i-?]] = {};
}
使用.reduce()
实际上很容易做到这一点。
var dir = {}
var paths = "documents/settings/user".split('/')
paths.reduce(function(dir, path) {
return dir[path] = {}
}, dir)
console.log(dir)
因为第一个参数总是返回的最后一个值(或提供的第一个值),所以我们所需要做的就是返回分配给当前路径的对象。因为赋值会导致赋值,所以我们可以将其用作return
语句本身的表达式。
如果需要,可以防止由于相邻的分隔符而导致路径名为空。
var dir = {}
var paths = "documents///settings/user".split('/')
paths.reduce(function(dir, path) {
return path ? (dir[path] = {}) : dir
}, dir)
console.log(dir)
构建有价值对象的另一个优雅解决方案:
const buildObjWithValue = (path, value = '') => {
const paths = path.split('.');
return paths.reduceRight((acc, item, index) => ({
[item]: index === paths.length - 1
? value
: acc
}), {});
}
例如buildObjWithValue('very.deep.lake', 'Baikal')
给了我们
{
very: {
deep: {
lake: 'Bailkal'
}
}
}
Object
s通过引用传递。您可以使用此功能并执行类似操作。
Array.forEach
var paths = "documents/settings/user".split('/')
var r = {};
var _tmp = r;
paths.forEach(function(el){
_tmp[el] = {};
_tmp = _tmp[el];
});
console.log(r)
对于
var paths = "documents/settings/user".split('/')
var r = {};
var _tmp = r;
for(var i=0; i<paths.length; i++){
_tmp = (_tmp[paths[i]] = {});
};
console.log(r)
相关文章:
- 未捕获的InvalidValueError:setIcon:不是字符串;并且没有url属性;并且没有路径属性
- 如何将字符串附加到对象中'路径'在Javascript中
- 从javascript中的字符串路径获取文件名
- 从包含密钥路径的字符串中获取json值
- 绘制动画openlayers线条字符串路径
- 区分路径字符串和标记字符串
- 从路径字符串 - Javascript 获取所有父路径
- 通过document.location以javascript中的字符串形式传递文件路径
- 框架中的实用程序,用于更轻松地定义 SVG 路径字符串
- 创建独立于平台的路径字符串
- 如何有效地检查路径字符串是否是 jQuery 中另一个路径字符串的子项
- 根据路径字符串构建嵌套文件夹结构
- Regex for Windows路径字符串
- Node.js添加相对路径字符串到数组复制斜杠
- 在myObj.one.two.three.field中,当字段有2个或更多嵌套级别时,通过路径字符串获取对象字段
- Javascript正则表达式解析路径字符串
- 基于文件路径字符串创建对象
- 获取URL路径字符串中的最后一个值
- javascript正则表达式替换路径字符串中的3digitis
- 格式化路径字符串在javascript