Javascript:将一个键数组变成一个空对象?
我知道这可能比我的大脑所做的要容易,但出于某种原因,我不能正确地做到这一点: 我有一个数组,如下所示:Javascript:将一个键数组变成一个空对象?,javascript,node.js,algorithm,recursion,Javascript,Node.js,Algorithm,Recursion,我知道这可能比我的大脑所做的要容易,但出于某种原因,我不能正确地做到这一点: 我有一个数组,如下所示: ["engine", "engine.car", "engine.car.driver", "engine.car.passenger", "wheels", "wheels.tires"] 我想把上面的数组转换成这个对象: { engine : { car : { driver : undefined, passe
["engine", "engine.car", "engine.car.driver",
"engine.car.passenger", "wheels", "wheels.tires"]
我想把上面的数组转换成这个对象:
{
engine : {
car : {
driver : undefined,
passenger: undefined
}
},
wheels : {
tires: undefined
}
}
我使用的是node 8.10.0。这对于JavaScript和eval功能来说非常简单。下面是一个简单的例子
var arr=[“发动机”、“发动机.汽车”、“发动机.汽车.驾驶员”、“发动机.汽车.乘客”、“车轮”、“车轮.轮胎”];
obj={};
对于(变量i=0;i 控制台日志(obj)你试过什么吗?请把你卡住的地方贴出来。数组总是分类的吗?例如,与引擎相关的所有属性是否会像示例中那样彼此相邻,或者是否可以有[“引擎”、“车轮”、“引擎.汽车”、“车轮.轮胎”…],因为此问题的解决方案可能会有所不同。不,一点也不,它可以以任何顺序出现@user8463863@sunil就“我被困在哪里”而言,我没有什么真正有价值的东西可以提供。我知道解决方案要么是一种递归算法(我正在努力使用atm),要么是一种在给定哈希字符串路径的哈希上访问/创建嵌套属性的方法。第二个解决方案似乎将我标记为冗余,所以这太棒了!没有递归<代码>函数转换数组对象(数组){var resultObject={},索引,项;函数转换({u数组,tmpObject){if({u数组.length>1){tmpObject[\u数组[0]]]={};返回对象.assign(tmpObject,{u转换({u数组.slice(1),tmpObject[\u数组[0]]);}否则返回tmpObject[\u数组[0]]=void 0;}对于(index=0;index1?_转换(item.slice(1),{}):void 0;}返回resultObject;}
使用eval
是不好的选择idea@GetOffMyLawn是否需要进一步说明?@GetOffMyLawn“eval的不当使用会打开注入攻击的代码”“这不是来自用户输入的数据,因此注入攻击不适用于此处。”调试可能更具挑战性(没有行号等),“这是一个公平的论点。”eval'd代码执行速度较慢(没有编译/缓存eval'd代码的机会)’即使是他指出的线程也不是过去的问题。没有绝对,这是eval的完美用法。你怎么知道这不是用户输入?