【问题标题】:Javascript - refactor array - array reduceJavascript - 重构数组 - 数组减少
【发布时间】:2021-03-10 10:26:03
【问题描述】:

重构(ise)一个数组/对象数组的最佳方法是什么? 我正在考虑使用 array.reduce,但无法找到解决方案。

例如,变换这个数组:

const carsInput =
     [
        {
            brand: 'volkswagen',
            model: 'golf',
            motorSpec: {
                ...
            },
            Dim: {
                ...
            },
        },
...
        {
            brand: 'volkswagen',
            model: 'passat',
            motorSpec: {
                ...
            },
            Dim: {
                ...
            },
        },
    ]

到这个对象数组

const carsOutput =
    {
        volkswagen: {
            brandName: 'volkswagen',
            models: {
                golf: {
                    modelName: 'golf',
                    motorSpec: {
                       ...
                    },
                    Dim: {
                       ...
                    },
                },
                passat: {
                    modelName: 'passat',
                    motorSpec: {
                        ...
                    },
                    Dim: {
                        ...
                    },
                },
            },
        },
    }

此外,如果您想到另一种(更好的)方式来呈现这个对象数组,我全神贯注! 非常感谢

【问题讨论】:

    标签: refactoring arrayobject array-reduce


    【解决方案1】:

    我相信其他人有更简洁的方法来做到这一点,但这是一种方法。

    const carsInput =
         [{
                brand: 'ford',
                model: 'mustang',
                motorSpec: {
                },
                Dim: {
                }
            },
            {
                brand: 'volkswagen',
                model: 'golf',
                motorSpec: {
                },
                Dim: {
                }
            },
            {
                brand: 'volkswagen',
                model: 'passat',
                motorSpec: {
                },
                Dim: {
                }
            },
        ];
        
    const carsOutput = new Object();
    
    function initializeMake(makeName) {
      carsOutput[makeName] = { brandName: makeName, models: {}};
      return carsOutput[makeName]
    }
    
    carsInput.forEach(car => {
        let make = carsOutput[car.brand] || initializeMake(car.brand);
    
        const modelDefinition = { 
        'modelName': car['model'],
        'motorSpec': car.motorSpec,
        'Dim': car.Dim
      };
      
        make.models[car.model] = modelDefinition;
    });
    
    console.log(carsOutput)
    

    【讨论】:

    • 我也认为有更快/更简洁的方法,但效果很好!非常感谢您的快速回复! +1
    猜你喜欢
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 1970-01-01
    • 2018-12-05
    • 2023-03-06
    • 1970-01-01
    • 2019-01-26
    相关资源
    最近更新 更多