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

JavaScript transform multidimensional array in one dimensional associative array

本文关键字:数组 转换 JavaScript 一维 关联      更新时间:2023-09-26

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

看起来像这样:

$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",
        ....
    },
    ....
   ];

此解决方案的特点是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>');

就像在sql或一般的关系数据库中一样,在ode维度中拥有这些数据的唯一机会是多次使用以下内容:因此,它将是多次id,name,对于每一次,您应该从嵌套数组中有一个条目。

如果有双层嵌套,那么您可能需要重复更多的字段。从sql中查找JOIN定义,它可能会充实一些内容。