Sort Through An Array Of Objects And Push Objects With The Same Key/value Pair To A New Array
Solution 1:
If you are defining a separate array for each you could use a switch statement.
var roster  = [
  {player: "Ben", position: "qb", salary: 1000},
  {player: "Brown", position: "wr", salary: 1200},
  {player: "Landry", position: "qb", salary: 800}
];
var qbArray = [];
var wrArray = [];
function parseIntoArrayByPosition() {
  for (var i = 0; i < roster.length; i++) {
    var position = roster[i].position;
    switch (position) {
      case"qb":
        qbArray.push(roster[i]);
        break;
      case"wr":
        wrArray.push(roster[i]);
        break;
    }
  }
}
Solution 2:
var positions = {};
for(var i = 0; i < Roster.length; i++) {
    var position = Roster[i].position;
    positions[position] = positions[position] || [];
    positions[position].push(Roster[i]);
}
Solution 3:
Well, you could go through it with a forEach loop, and then assign your player based on a map of positions.
In my example (excuse my football knowledge), I run through an the arrayOfObject using the forEach function (that is provided thanks to the 'use strict'; statement at the top), and then use the position property of the actual object to check if it has already an array inside the targetObject, if not, I create a new array and push the player in to it.
The log statement at the end then shows you the output. I added the mapping from position QB to QuarterBack as an extra. If the map isn't found, it would take the actual position :)
'use strict';
var arrayOfObject = [
    { name: 'player', position: 'QB' },
    { name: 'player 2', position: 'W' },
    { name: 'player 3', position: 'RW' }
], targetObject = {}, map = {
  'QB': 'QuarterBacks',
  'W': 'Wingers',
  'RW': 'RightWingers'
};
arrayOfObject.forEach(function(player) {
  var pos = player.position,
      mappedPosition = map[pos] || pos;
  if (!targetObject[mappedPosition]) {
    targetObject[mappedPosition] = [];
  }
  targetObject[mappedPosition].push(player);
});
console.log(targetObject);Solution 4:
I might do this slightly differently, but JavaScript seems to allow you to do things in a plethora of ways. If I cannibalize the list from the answer from @dspano, I get this for my code:
functioncreateListByPosition(inputList, desiredPosition) {
    var outputList = newArray();
    for (var i = 0; i < inputList.length; i++) {
        var position = inputList[i].position;
        if (position === desiredPosition)
        {
            outputList.push(inputList[i])
        }
    }
    return outputList;
}
var quaterbackList = createListByPosition(roster, 'qb');
This also has the benefit of being pretty generic.
Post a Comment for "Sort Through An Array Of Objects And Push Objects With The Same Key/value Pair To A New Array"