итерация по массиву полууникальных объектов - PullRequest
0 голосов
/ 04 августа 2020

скажем, что у вас есть массив объектов, как показано внизу, как бы вы go перебирали этот массив, чтобы получить результаты каждой предыдущей игры. Я в основном обернулся, когда пытался перебрать значения, которых не было

the result im looking for would be an array looking something like this 
newArr: [
    {
        "id": 1,
        team: 'rockets',
        record:{
             first: 'win',
             second: 'loss',
             thrid: 'loss'
             }
    },
    {
        "id": 2,
        team: 'raptors',
        record:{
             first: 'loss',
             }
    },
     ...
     ...

]
gamesPlayed: [
    {
        "id": 1,
        "team": "rockets",
        prevScore: [{
            value: {results: 'win'},
            prevScore: [{
                value: {results: 'loss'},
                prevScore: [{
                    value: {results: 'loss'},
                    prevScore: []
                }]
            }]
        }]
    },
    {
        "id": 2,
        "team": "raptors",
        prevScore: [{
            value: {results: 'loss'},
            prevScore: []
        }]
    },
    {
        "id": 3,
        "team": "hornets",
        prevScore: [{
            value: {results: 'win'},
            prevScore: [{
                value: {results: 'win'},
                prevScore: []
            }]
        }]
    },
    ...
]

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Для перебора команд используется функция map.
Получить идентификатор и команду для объекта из collectResults просто. Для получения записи существует функция с уровнем параметра, которая указывает, насколько безумный результат будет следующим, оцениваемым для этой команды.
Эта функция возвращает пустой объект, если prevScore является пустым массивом, иначе она извлечет первый результат в новый объект. Затем функция вызывается рекурсивно с уровнем +1 для левых результатов. Объект-результат из реальной игры плюс объект-результат из предыдущих игр будет добавлен вместе с assign и возвращен.
Соответствующее имя объекта-объекта (первое, второе, ...) для записи может быть извлечено с массивом УРОВНИ и уровень. Таким образом, вы можете расширить его настолько, насколько захотите.

function collectResults(gamesPlayed) {
    let res = gamesPlayed.map( teamPlay => {
        let result = {
            id: teamPlay.id,
            team: teamPlay.team,
            record: getResults(teamPlay.prevScore, 0)
        }
        return result;
    });
    return res;
}

function getResults(prevScore, level) {
    const LEVELS = ['first', 'second', 'third', 'fourth'];
    if ( !prevScore.length ) 
        return {};
    else {
        let result= {};
        result[ LEVELS[level] ] = prevScore[0].value.results;
        let resultsPrevious = getResults(prevScore[0].prevScore, ++level);
   
        return Object.assign(result, resultsPrevious);
    }
}

let gamesPlayed = [
    {
        "id": 1,
        "team": "rockets",
        prevScore: [{
            value: {results: 'win'},
            prevScore: [{
                value: {results: 'loss'},
                prevScore: [{
                    value: {results: 'loss'},
                    prevScore: []
                }]
            }]
        }]
    },
    {
        "id": 2,
        "team": "raptors",
        prevScore: [{
            value: {results: 'loss'},
            prevScore: []
        }]
    },
    {
        "id": 3,
        "team": "hornets",
        prevScore: [{
            value: {results: 'win'},
            prevScore: [{
                value: {results: 'win'},
                prevScore: []
            }]
        }]
    }
];

console.log( collectResults(gamesPlayed) );
0 голосов
/ 04 августа 2020

Немного неряшливо. Но работает на входе

var data = [{
    "id": 1,
    "team": "rockets",
    prevScore: [{
      value: {
        results: 'win'
      },
      prevScore: [{
        value: {
          results: 'loss'
        },
        prevScore: [{
          value: {
            results: 'loss'
          },
          prevScore: []
        }]
      }]
    }]
  },
  {
    "id": 2,
    "team": "raptors",
    prevScore: [{
      value: {
        results: 'loss'
      },
      prevScore: []
    }]
  }

];

var result = [];
var numbers = {
  1: "first",
  2: "second",
  3: "third",
  4: "fourth"
};

for (obj of data) {
  var index = 1;
  var oneGameResult = {
    "id": obj.id,
    "team": obj.team
  }
  var oneGameObj = {};
  buildResult(obj.prevScore, oneGameObj, index);

  oneGameResult["record"] = oneGameObj;
  result.push(oneGameResult);
}

console.log("result", result);

function buildResult(obj, oneGameObj, index) {

  var a = numbers[index];
  if (obj[0].prevScore && obj[0].prevScore.length > 0) {
    oneGameObj[a]=obj[0].value.results;
      
    index++;
    buildResult(obj[0].prevScore, oneGameObj, index);
  } else if (index == 1) {
    oneGameObj[a]=obj[0].value.results;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...