JavaScript在一维关联数组中转换多维数组

时间:2015-11-29 22:19:17

标签: javascript multidimensional-array

我有一个包含两个嵌套数组的数组多维。

看起来像这样:

$scope.multidimensionalArray = [{
            id:1,
            name:"John",
            ....
            nestedArray1:[{
                importantKey1:"important_data1",
                ....
                    nestedArray2:[{
                            importantKey2:"important_data2",
                                ....
                            }
                                 ]},
                                 ....
                                         ]}];

如何在一维中转换这个多维数组,必须看起来像这样:

$scope.oneDimensional = [
    { 
        id:1,
        name:"John",
        importantKey1:"important_data1", 
        importantKey2: "important_data2",
        ....
    },
    ....
   ];

2 个答案:

答案 0 :(得分:3)

此解决方案包含Object.keys()Array.prototype.forEach()

function getProperties(o, obj) {
    Object.keys(o).forEach(function (k) {
        if (Array.isArray(o[k])) {
            getItems(o[k], obj);
        } else {
            obj[k] = o[k];
        }
    });
}        

function getItems(array, obj) {
    array.forEach(function (o) {
        getProperties(o, obj);
    });
}

var multidimensionalArray = [{ id: 1, name: "John", nestedArray1: [{ importantKey1: "important_data1", nestedArray2: [{ importantKey2: "important_data2", }] }] }, { id: 2, name: "Johanna", nestedArray1: [{ importantKey1: "important_data11", nestedArray2: [{ importantKey2: "important_data12", }] }] }],
    result = multidimensionalArray.map(function (o) {
        var obj = {};
        getProperties(o, obj);
        return obj;
    });

    document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

答案 1 :(得分:0)

与sql或通常是关系数据库一样,在ode维度中拥有此数据的唯一机会是您多次使用以下这些内容: 所以它会多次 id,name ,对于每一个你应该有一个来自嵌套数组的条目。

如果存在双级嵌套,则可能需要重复更多字段。 从sql中寻找 JOIN 定义,它可能会对此有所了解。