Преобразовать массив объектов с динамическим ключом в новый массив - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть вывод из моего возвращаемого массива, как показано ниже:

[{
    SENIORS: "SINGLE_MAN",
    age: "U21",
    fullName: "John Doe",
    personId: "0001337"
}]

И мне нужно вернуть это в новый формат, где мне нужно было бы добавить значения из вышеупомянутого в новые ключи, некоторые вложенныеточно так же, как приведенная ниже структура.

[
    {
    "personId": "0001337",
    "Groups": [
        {
        "group":"SENIORS",
        "status" :"SINGLE_MAN"
        }
    ]
    }
]

Как видите, я создал новый ключ под названием Группы и 2 новых ключа в этой группе и статусе.Не уверен, как лучше создать ключи и в то же время назначить им старые значения.Оригинальный ключ Senior теперь должен быть свойством группы.

Я использую lodash, если это можно использовать?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Вы можете изменить данные довольно легко даже без лишнего шума.Также при условии, что мы заранее знаем имена групп.

let a = [{
    SENIORS: "SINGLE_MAN",
    age: "U21",
    fullName: "John Doe",
    personId: "0001337"
}];

let groupNames = ["SENIORS"];

console.log("Input: ", a);

let output = a.map(row => {
    let r = { personId: row.personId };
    r.Groups = groupNames
       .filter(value => Object.keys(row).indexOf(value) !== -1)
       .map(group => {return {group: group, status: row[group]}});

    return r;
});

console.log("Output: ", output);
0 голосов
/ 08 февраля 2019

Если у него всегда есть четыре свойства, и только одно из них является динамическим, вы можете изолировать динамическое свойство, используя синтаксис расширения.А затем используйте Object.entries и map, например:

const input = [{
  SENIORS: "SINGLE_MAN",
  age: "U21",
  fullName: "John Doe",
  personId: "0001337"
},
{
  JUNIORS: "SINGLE_WOMAN",
  age: "U22",
  fullName: "Jane Doe",
  personId: "0001338"
}]

const output = input.map(({ personId, fullName, age, ...rest}) => {
  const [group, status] = Object.entries(rest)[0];
  return { personId, Groups: [{ group, status }] }
})

console.log(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...