web-dev-qa-db-fra.com

Changer la clé d'objet en utilisant Object.keys ES6

J'ai 

var tab = {
abc:1,
def:40,
xyz: 50
}

Je veux changer le nom de abc, def, xyz en autre chose, est-ce possible?

J'ai essayé

const test = Object.keys(tab).map(key => {
  if (key === 'abc') {
    return [
      a_b_c: tab[key]
    ]
  }
});

console.log(test);

J'ai beaucoup de clés non définies.

9
Alan Jenshen

Voici comment je l'ai résolu. J'ai utilisé une carte pour mapper entre une clé existante et une nouvelle clé. Remplacez simplement la carte par les nouvelles valeurs dont vous avez besoin. Enfin, supprimez les clés précédentes de l'objet à l'aide de omit.

var tab = {
  abc:1,
  def:40,
  xyz: 50
}

var map = {
    abc : "newabc",
    def : "newdef",
    xyz : "newxyz"
}


_.each(tab, function(value, key) {
    key = map[key] || key;
    tab[key] = value;
});


console.log(_.omit(tab, Object.keys(map)));
1

Voici le code complet pour remplacer les clés en fonction de l'objet qui mappe les valeurs à remplacer:

const tab = {abc: 1, def: 40, xyz: 50};
const replacements = {'abc': 'a_b_c', 'def': 'd_e_f'};

let replacedItems = Object.keys(tab).map((key) => {
  const newKey = replacements[key] || key;
  return { [newKey] : tab[key] };
});

Cela produira un tableau avec trois objets où les clés sont remplacées. Si vous voulez créer un nouvel objet avec eux, il suffit de:

const newTab = replacedItems.reduce((a, b) => Object.assign({}, a, b));

Cette sortie: {"a_b_c": 1, "d_e_f": 40, "xyz": 50}

5
zvona

Avec lodash mapKeys function, il est assez facile de transformer les clés d’objet.

let tab = {
  abc: 1,
  def: 40,
  xyz: 50
}

const map = {
  abc: "newabc",
  def: "newdef",
  xyz: "newxyz"
}

// Change keys
_.mapKeys(tab, (value, key) => {
  return map[value];
});

// -> { newabc: 1, newdef: 40, newxyz: 50 }
3
Mohan Dere

C'est facile avec lodash.

import { mapKeys } from 'lodash';    

const tab = {
    abc: 1,
    def: 40,
    xyz: 50
};

const test = mapKeys(tab, (value, key) => {
    if (key === 'abc') return 'a_b_c';
    return key;
});
1
Man Wai Lorentz Yip

Vous pouvez ajouter la nouvelle clé et supprimer l'ancienne.

var tab = {
abc:1,
def:40,
xyz: 50
}

    var key = 'abc'
    console.log(key)
    tab['a_b_c'] = tab[key]
    delete tab[key]
    
 
console.log(tab);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

0
Shubham Khatri

Le chemin le plus court que j'ai trouvé jusqu'à présent:

const tab = {abc: 1, def: 40, xyz: 50};

const {'abc': 'a_b_c', 'def': 'd_e_f', ...rest} = tab;
tab = {'a_b_c', 'd_e_f', ...rest}
0
Jeff Lowery