如何从一个扁平的JavaScript数组创建一个多维数组?

12 浏览
0 Comments

如何从一个扁平的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"

}

}

}

]

有简单的方法吗?

0
0 Comments

在这个问题中,用户希望找到一种在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数据,并将结果显示在屏幕上。

希望这个解决方案对您有所帮助!

0
0 Comments

问题的出现原因:需要将一个一维数组转换为多维数组。

解决方法:

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]

希望对你有所帮助。

0