如何从一个扁平的JavaScript数组创建一个多维数组?
如何从一个扁平的JavaScript数组创建一个多维数组?
我有一个带有某些值的示例,我想要改变,这里是链接http://jsfiddle.net/k83hj1jb/。
结果是一个平铺数组:
[
{"name":"options[11][140]","value":"140"},
{"name":"options[8][99]","value":"99"},
{"name":"options[8][103]","value":"103"}
]
我想要改成这样:
[
{
"options":
{
"11":{"140":"140"},
"8":
{
"99":"99",
"103":"103"
}
}
}
]
有简单的方法吗?
在这个问题中,用户希望找到一种在JavaScript中将平面数组转换为多维数组的方法。他已经找到了在PHP中实现此功能的方法,但他需要在JavaScript中实现相同的功能。
为了解决这个问题,以下是一个可能的解决方案:
// 这是初始的JSON数据 var json = '[{"name":"options[11][140]","value":"140"}, {"name":"options[8][99]","value":"99"}, {"name":"options[8][103]","value":"103"}]'; // 将JSON解码为JavaScript数组 var array = JSON.parse(json); // 初始化一个新的对象来存储多维数组 var new_array = {}; // 遍历数组的每个值 array.forEach(function(value) { // 访问name值 var option = value.name; // 使用正则表达式匹配方括号之间的数字 var matches = option.match(/\[(.*?)\]/g); // 提取方括号中的数字 var option_value = matches.map(function(match) { return match.replace(/\[|\]/g, ''); }); // 如果多维数组中尚不存在此键,则创建一个新的数组 if (!new_array.options) { new_array.options = {}; } if (!new_array.options[option_value[0]]) { new_array.options[option_value[0]] = []; } // 将值添加到多维数组中的相应位置 new_array.options[option_value[0]].push([option_value[1], value.value]); }); // 最后,将多维数组编码为JSON数据 var json = JSON.stringify(new_array); // 将结果显示在屏幕上 console.log(json);
这个解决方案使用正则表达式匹配方括号之间的数字,并将它们提取到一个数组中。然后,它检查多维数组中是否已经存在相应的键,如果不存在则创建一个新的数组,并将值添加到正确的位置。最后,它将多维数组编码为JSON数据,并将结果显示在屏幕上。
希望这个解决方案对您有所帮助!
问题的出现原因:需要将一个一维数组转换为多维数组。
解决方法:
1. 首先定义一个函数getNestArr
,接受一个参数flatArr
,表示一维数组。
2. 初始化一个嵌套对象nestObj
,其中包含一个options
属性作为嵌套数组的容器。
3. 遍历一维数组flatArr
,对每个元素进行处理。
4. 将flatArr
中的元素的name
属性赋值给opts
变量。
5. 使用字符串操作方法去除opts
中的不需要的部分,得到parts
数组。
6. 判断nestObj.options
中是否已经存在parts[0]
属性,如果不存在则创建。
7. 将obj.value
赋值给nestObj.options[parts[0]][parts[1]]
。
8. 返回一个包含nestObj
的数组[nestObj]
。
测试:
1. 定义一个一维数组flatArr
。
2. 调用getNestArr
函数,传入flatArr
作为参数,得到嵌套数组nestArr
。
3. 使用console.log
输出nestArr
的JSON字符串形式。
输出:[{"options":{"8":{"99":"99","103":"103"},"11":{"140":"140"}}}]
结果与期望一致,但是建议返回nestObj
而不是[nestObj]
。
希望对你有所帮助。