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