Преобразовать вложенный массив -> массивы -> объект в массив -> объект => значение объекта: значение объекта - PullRequest
0 голосов
/ 24 ноября 2018

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

ОТ ЗДЕСЬ: ссылка на все данные ЗДЕСЬ (this.localObject)

const employees = [{
    "EmployeeID": "100A",
    "FirstName": "Downs",
    "aval": [
       {"start": "11-19", "end": "2", "ava": "30", "health": "4"},
       {"start": "11-20", "end": "2", "ava": "40", "health": "4"},
       {"start": "11-21", "end": "2", "ava": "50", "health": "4"},
       {"start": "11-22", "end": "2", "ava": "60", "health": "4"}
    ]
  },
  {
    "EmployeeID": "100B",
    "FirstName": "Mckenzie",
    "aval": [
       {"start": "11-19", "end": "2", "ava": "1", "health": "4"},
       {"start": "11-20", "end": "2", "ava": "2", "health": "4"},
       {"start": "11-21", "end": "2", "ava": "3", "health": "4"},
       {"start": "11-22", "end": "2", "ava": "4", "health": "4"}
    ]
  },
]

ЗДЕСЬ:

const employees = [
   { "EmployeeID": "100A", "11-19": "30"},
   { "EmployeeID": "100A", "11-20": "40"},
   { "EmployeeID": "100A", "11-21": "50"},
   { "EmployeeID": "100A", "11-22": "60"},
   { "EmployeeID": "100B", "11-19": "1"},
   { "EmployeeID": "100B", "11-20": "2"},
   { "EmployeeID": "100B", "11-21": "3"},
   { "EmployeeID": "100B", "11-22": "4"}
]

//and so on...

Пока я пробовал:

this.localData = this.localObject.employees;
const firstLevel = this.localData.map(x => x.aval);

firsLevel даст мне массивобъектов, которые ближе к тому, что мне нужно, теперь мне нужно поместить значение "start" в качестве ключа и значение "ava" в качестве значения свойства внутри их собственных контейнеров объектов

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Вам также необходимо перебрать внутренние массивы и создать один массив.

var array = [{ EmployeeID: "100A", FirstName: "Downs", aval: [{ start: "11-19", end: "2", ava: "30", health: "4" }, { start: "11-20", end: "2", ava: "40", health: "4" }, { start: "11-21", end: "2", ava: "50", health: "4" }, { start: "11-22", end: "2", ava: "60", health: "4" }] }, { EmployeeID: "100B", FirstName: "Mckenzie", aval: [{ start: "11-19", end: "2", ava: "1", health: "4" }, { start: "11-20", end: "2", ava: "2", health: "4" }, { start: "11-21", end: "2", ava: "3", health: "4" }, { start: "11-22", end: "2", ava: "4", health: "4" }] }],
    result = array.reduce((r, { EmployeeID, aval }) => [
        ...r,
        ...aval.map(({ start, ava }) => ({ EmployeeID, [start]: ava }))
    ], []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 24 ноября 2018

Вы можете использовать Array.flatMap и перебирать aval внутри него, используя Array.map, как показано ниже

const employees = [{
    "EmployeeID": "100A",
    "FirstName": "Downs",
    "aval": [
       {"start": "11-19", "end": "2", "ava": "30", "health": "4"},
       {"start": "11-20", "end": "2", "ava": "40", "health": "4"},
       {"start": "11-21", "end": "2", "ava": "50", "health": "4"},
       {"start": "11-22", "end": "2", "ava": "60", "health": "4"}
    ]
  },
  {
    "EmployeeID": "100B",
    "FirstName": "Mckenzie",
    "aval": [
       {"start": "11-19", "end": "2", "ava": "1", "health": "4"},
       {"start": "11-20", "end": "2", "ava": "2", "health": "4"},
       {"start": "11-21", "end": "2", "ava": "3", "health": "4"},
       {"start": "11-22", "end": "2", "ava": "4", "health": "4"}
    ]
  },
]

let res = employees.flatMap(({ EmployeeID, aval }) => 
                    aval.map(({ start, ava }) => ({ EmployeeID, [start]: ava })))

console.log(res)
...