(Javascript)减少和Unflatten数组

(Javascript) Reduce and Unflatten Array

本文关键字:Unflatten 数组 Javascript      更新时间:2023-09-26

使用嵌套的值数组:

var stagedArray = [
    ["Spring", "Volleyball", "V"],
    ["Spring", "Baseball", "V"],
    ["Fall", "Baseball", "JV"],
    ["Fall", "Baseball", "V"]
];

假设每个嵌套数组的层次结构位置0是父级,位置1是它的直接子级,位置2是位置1的子级,我可以使用什么方法来减少和不平坦这个数组,以得到类似于下面的结果:

var finalList = [
    {
        season: "Spring",
        items: [
                {
                    sport: "Basketball",
                    items: [ 
                            { division: "V" },
                        ]
                }
                {
                    sport: "Volleyball",
                    items: [ 
                            { division: "V" },
                        ]
                }
        ]
    },
        {
        season: "Fall",
        items: [
                {
                    sport: "Baseball",
                    items: [ 
                            { division: "V" },
                            { division: "JV" }
                        ]
                }
        ]
    }]

理想情况下,我想创建一个函数来定义什么位置和哪个标签与它们动态关联。很多谢谢!

与同事一起工作了一个很好的起点,接下来的步骤将是更新该函数,使其递归地工作,具有不同的深度和动态标签。

 function getTranformedData(data) {
  var transformedData = {};
  for (var i = 0, n = stagedArray.length; i < n; i++) {
    var sportData = stagedArray[i];
    var season = sportData[0];
    var typeOfSport = sportData[1];
    var teamDivision = sportData[2];
    if (!transformedData.hasOwnProperty(season)) {
      // Create new season object
      transformedData[season] = {
        'season': season,
        'items': []
      };
    }
    var transformedSportData = {
      'sport': typeOfSport,
      'items': {
        'division': teamDivision
      }
    };
    transformedData[season]['items'].push(transformedSportData);
  }
  return transformedData;
}
function convertObjectToArrayOfOjects(dataObject) {
  var data = []
  for (var key in dataObject) {
    data.push(dataObject[key]);
  }
  return data;
}
var stagedArray = [
  ["Spring", "Volleyball", "V"],
  ["Spring", "Baseball", "V"],
  ["Fall", "Baseball", "JV"],
  ["Fall", "Baseball", "V"]
];
var data = getTranformedData(stagedArray);
data = convertObjectToArrayOfOjects(data);

console.log(data);

/* RESULTING DAT STRUCTURE */
/*
[{
  "season": "Spring",
  "items": [{
    "sport": "Volleyball",
    "items": {
      "division": "V"
    }
  }, {
    "sport": "Baseball",
    "items": {
      "division": "V"
    }
  }]
}, {
  "season": "Fall",
  "items": [{
    "sport": "Baseball",
    "items": {
      "division": "JV"
    }
  }, {
    "sport": "Baseball",
    "items": {
      "division": "V"
    }
  }]
}]

*/