【发布时间】:2017-01-21 20:42:40
【问题描述】:
在普通 JS(无库)中将数组求解为对象(数组内)的任何递归方法解决方案。基本上我想向自己发送相同的功能。此时我被最后一次迭代覆盖了对象。 我明白了:
{firstName: "Sallito", lastName: "Jordan", age: 16, role: "server"}
虽然我应该得到:
[
{firstName: 'Eren', lastName: 'Duran', age: 22, role: 'admin'},
{firstName: 'Sallito', lastName: 'Jordan', age: 16, role: 'server'}
]
原来的数组是:
var array = [
[
['firstName', 'Eren'], ['lastName', 'Duran'], ['age', 22], ['role', 'admin']
],
[
['firstName', 'Sallito'], ['lastName', 'Jordan'], ['age', 16], ['role', 'server']
]
];
我目前的解决方案是:
function transformData(array) {
var obj = {};
for(var i = 0; i < array.length; i++){
for(var j = 0; j < array[i].length; j++){
for(var k = 0; k < array[i][j].length; k++){
if(k === 0){
var currentKey = array[i][j][k];
var currentValue = array[i][j][k + 1];
obj[currentKey] = currentValue;
}
}
}
}
return obj;
}
请提供递归的想法,因为我知道如何使用 forEach 和 map.reduce 方法来实现。我真的很想学习递归性。谢谢!
【问题讨论】:
-
请添加原始数据。
-
..或者如果没有递归解决方案......那么:如何不覆盖我的 obj 而是将新对象添加到旧对象到数组中?
-
尼娜,一切都在这里......预期的结果,我的代码和我得到的结果。缺少的是: [ [ ['firstName', 'Eren'], ['lastName', 'Duran'], ['age', 22], ['role', 'admin'] ], [ ['firstName', 'Sallito'], ['lastName', 'Jordan'], ['age', 16], ['role', 'server'] ] ] //对不起!
-
您分享的示例数据是一个简单的 json 对象字符串。它不是数组。有了这些数据,您肯定不需要三个 for 循环。您期望的结果是原始对象数组。所以它在输入数据、逻辑和你想要的输出之间感到困惑。如果您提供要处理的实际数据和所需输出的样本,我们将不胜感激。
-
递归是什么意思?递归通常用于相同的数据模式(已给出)和相同的处理,但未给出。对于每个级别,您需要不同的初始化、处理/收集和返回。也许你正在寻找这样的东西:gist.github.com/NinaScholz/2a702e1e64b061471ee5
标签: javascript arrays object recursion