Преобразование массива объектов в один объект одним из ключей - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь преобразовать массив, содержащий объекты, в один объект, где ключом является «страница», а значением является «has_access».Поэтому я мог получить к нему доступ позже, например, через has_access.about.

Есть ли одна строка кода, которая могла бы достичь этого?

Я пытался это сделать, но он возвращает мне исходный массив.

var myData = Object.keys(data).map(key => {
    return data[key];
})

Вот исходный массив, который я хотел бы преобразовать

[
    {
        "id": 215,
        "page": "home",
        "has_access": 1,
    },
    {
        "id": 216,
        "page": "about",
        "has_access": 0,
    },
    {
        "id": 217,
        "page": "profile",
        "has_access": 1,
    }
]

Желаемый результат:

has_access: {
    home: 1
    about: 0
    profile: 1
}

Ответы [ 4 ]

3 голосов
/ 28 апреля 2019

Полученный объект можно получить с помощью .reduce():

const data = [
    {"id": 215, "page": "home", "has_access": 1},
    {"id": 216, "page": "about", "has_access": 0},
    {"id": 217, "page": "profile", "has_access": 1}
];

const has_access = data.reduce((r, c) => (r[c.page] = c.has_access, r), {});

console.log(has_access);
1 голос
/ 28 апреля 2019

Вы можете использовать reduce для циклического прохождения объекта и использовать Object.assign для обновления аккумулятора,

var data = [{"id":215,"page":"home","has_access":1},{"id":216,"page":"about","has_access":0},{"id":217,"page":"profile","has_access":1}];
var result = data.reduce((c, v) => Object.assign(c, {[v.page]: v.has_access}), {});

console.log(result);
0 голосов
/ 28 апреля 2019

Это просто - укажите ключ и значение, затем используйте map и reduce:

const a = [{
    "id": 215,
    "page": "home",
    "has_access": 1
  },
  {
    "id": 216,
    "page": "about",
    "has_access": 0
  },
  {
    "id": 217,
    "page": "profile",
    "has_access": 1
  }
];

const value = "has_access";
const key = "page";

const res = {
  [value]: a.map(o => [o[key], o[value]]).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {})
}

console.log(res);
0 голосов
/ 28 апреля 2019

Это может быть достигнуто с помощью метода reduce() с помощью следующего:

const array = [
    {
        "id": 215,
        "page": "home",
        "has_access": 1,
    },
    {
        "id": 216,
        "page": "about",
        "has_access": 0,
    },
    {
        "id": 217,
        "page": "profile",
        "has_access": 1,
    }
];

const result = array.reduce((acc, i) => ({ ...acc, [ i.page ] : i.has_access }), {});

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