【问题标题】:Transforming object data in JS在 JS 中转换对象数据
【发布时间】:2022-06-11 08:05:44
【问题描述】:

我在 JS 中转换数据时遇到问题。

数据如下所示:

const data = [
  {
    "idPopulation": 1,
    "namePopulation": "Population 1",
    "idStrategy": 1,
    "nameStrategy": "Strategy 1",
    "priority": 1
  },
  {
    "idPopulation": 1,
    "namePopulation": "Population 1",
    "idStrategy": 2,
    "nameStrategy": "Strategy 2",
    "priority": null
  },
  {
    "idPopulation": 1,
    "namePopulation": "Population 1",
    "idStrategy": 3,
    "nameStrategy": "Strategy 3",
    "priority": 2
  },
  {
    "idPopulation": 2,
    "namePopulation": "Population 2",
    "idStrategy": 1,
    "nameStrategy": "Strategy 1",
    "priority": null
  },
  {
    "idPopulation": 2,
    "namePopulation": "Population 2",
    "idStrategy": 2,
    "nameStrategy": "Strategy 2",
    "priority": null
  },
  {
    "idPopulation": 2,
    "namePopulation": "Population 2",
    "idStrategy": 3,
    "nameStrategy": "Strategy 3",
    "priority": 1
  },
  {
    "idPopulation": 3,
    "namePopulation": "Population 3",
    "idStrategy": 1,
    "nameStrategy": "Strategy 1",
    "priority": 1
  },
  {
    "idPopulation": 3,
    "namePopulation": "Population 3",
    "idStrategy": 2,
    "nameStrategy": "Strategy 2",
    "priority": 2
  },
  {
    "idPopulation": 3,
    "namePopulation": "Population 3",
    "idStrategy": 3,
    "nameStrategy": "Strategy 3",
    "priority": 3
  }
]

我需要将它转换成这个,以便前端包可以使用它(https://devexpress.github.io/devextreme-reactive/react/grid/docs/guides/editing/):

const testRows = [
    {
      nameStrategy: 'Strategy 1',
      priorityPopulation1: 1,
      priorityPopulation2: null,
      priorityPopulation3: 1,
    }, 
{...}]

我正在尝试减少和填充,但还没有弄清楚。到目前为止,我已经做到了:

const result = data.reduce((groupedStrat, strat) => {
  const stratName = strat.nameStrategie;
  if(groupedStrat[stratName] == null) groupedStrat[stratName] = []
    groupedStrat[stratName].push(strat)
    return groupedStrat
}, {})

console.log(result).

如果我的问题清晰易懂,请告诉我。

谢谢!

【问题讨论】:

    标签: javascript arrays json object format


    【解决方案1】:

    对于您和其他新开发人员,我有一个建议:不要使用 reduce。将问题分解为更简单的步骤:

    1. 你有一些数据
    2. 您需要一些从这些数据生成的 NewData

    要实现这一点,您必须读取旧数据并根据该信息创建新数据。旧数据是数组格式,然后需要一个 for 循环。对于每个数组项,您必须读取属性并基于此存储一些临时数据。获得所有这些临时数据后,使用新的格式化数据创建一个最终数组。

    const data = [
        {
            "idPopulation": 1,
            "namePopulation": "Population 1",
            "idStrategy": 1,
            "nameStrategy": "Strategy 1",
            "priority": 1
        },
        {
            "idPopulation": 1,
            "namePopulation": "Population 1",
            "idStrategy": 2,
            "nameStrategy": "Strategy 2",
            "priority": null
        },
        {
            "idPopulation": 1,
            "namePopulation": "Population 1",
            "idStrategy": 3,
            "nameStrategy": "Strategy 3",
            "priority": 2
        },
        {
            "idPopulation": 2,
            "namePopulation": "Population 2",
            "idStrategy": 1,
            "nameStrategy": "Strategy 1",
            "priority": null
        },
        {
            "idPopulation": 2,
            "namePopulation": "Population 2",
            "idStrategy": 2,
            "nameStrategy": "Strategy 2",
            "priority": null
        },
        {
            "idPopulation": 2,
            "namePopulation": "Population 2",
            "idStrategy": 3,
            "nameStrategy": "Strategy 3",
            "priority": 1
        },
        {
            "idPopulation": 3,
            "namePopulation": "Population 3",
            "idStrategy": 1,
            "nameStrategy": "Strategy 1",
            "priority": 1
        },
        {
            "idPopulation": 3,
            "namePopulation": "Population 3",
            "idStrategy": 2,
            "nameStrategy": "Strategy 2",
            "priority": 2
        },
        {
            "idPopulation": 3,
            "namePopulation": "Population 3",
            "idStrategy": 3,
            "nameStrategy": "Strategy 3",
            "priority": 3
        }];
    
        //start reading and storing temp data 
        var strategies = {};//here store by strategy
        for( var i=0; i<data.length; i++){
           var item = data[i];
           if( !strategies[item.idStrategy] ){ //define the strategy
               strategies[item.idStrategy] = [];
           }
           //add item to strategy
           strategies[item.idStrategy].push(item);
        }
    
        //create converted data from temp data 
        var convertedData = [];
        
        for(var strategyId in strategies){
            var items= strategies[strategyId];
            var convertedItem = {
                nameStrategy: items[0].nameStrategy //get it from the firs as all items have the same nameStrategy
                //priorityPopulation1: null, dont define these yet
                //priorityPopulation2: null,
                //priorityPopulation3: null,
            }
    
            for( var j=0; j<items.length; j++){
                var item = items[j];
                convertedItem["priorityPopulation" + item.idPopulation] = item.priority;
            }
            convertedData.push(convertedItem );
        }
    
        console.log( convertedData );

    【讨论】:

    • 非常感谢您的解决方案,但最重要的是您的建议。
    • 不客气。如果您通过提高我的堆栈声誉将答案标记为正确来感谢我,我将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多