3
votes

Conversion d'un tableau d'objets en un seul objet par l'une des clés

J'essaie de convertir un tableau qui contient des objets en un seul objet où la clé est "page" et la valeur est "has_access". Je pourrais donc y accéder plus tard avec has_access.about par exemple.

Y a-t-il une seule ligne de code qui pourrait y parvenir?

J'ai essayé mais cela me rend le tableau d'origine.

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

Voici le tableau source que je voudrais convertir

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

Résultat souhaité:

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


0 commentaires

4 Réponses :


0
votes

Ceci peut être réalisé avec la méthode reduction () , via ce qui suit:

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);


0 commentaires

4
votes

Vous pouvez obtenir l'objet résultant en utilisant .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);


0 commentaires

1
votes

Vous pouvez utiliser réduire pour parcourir l'objet et utiliser Object.assign pour mettre à jour l'accumulateur,

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 commentaires

0
votes

C'est facile - spécifiez la clé et la valeur, puis utilisez map et 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 commentaires