0
votes

Renommer des clés dans un objet

J'ai un objet avec plusieurs clés et valeurs.

Je veux seulement renommer certaines des clés et tout non plus. Avec ce que je fais, il ne renvoie pas le reste des paires de la valeur de clé dans l'objet: p>

p>

{
  firstkey: "value1",
  secondkey: "value2",
  key3: "value3", 
  key4: "value4"
}


0 commentaires

6 Réponses :


4
votes

Vous pouvez obtenir les entrées et remplacer les touches en cochant KEYMAP CODE> et en obtenir le nouveau ou prenez l'ancienne clé.

p>

let data =  { key1: "value1", key2: "value2", key3: "value3", key4: "value4" }; 
    keyMap = { key1: "firstkey", key2: "secondkey" },
    mappedData = Object.fromEntries(
        Object
            .entries(data)
            .map(([key, value]) => [key in keyMap ? keyMap[key] : key, value])
    );

console.log(mappedData);


0 commentaires

2
votes

Peut-être quelque chose comme ceci:

p>

const changeKeys = (keyMap) => (obj) =>
  Object .fromEntries (Object .entries (obj) .map (([k, v]) => [keyMap[k] || k, v]))

const data = {key1: "value1", key2: "value2", key3: "value3", key4: "value4"}; 
const keyMap = {key1: "firstkey", key2: "secondkey"};

console .log(
  changeKeys (keyMap) (data)
)


1 commentaires

L'utilisation de Nina de dans serait mieux si vous avez besoin de mapper une clé de la chaîne vide.



1
votes

Vous pouvez le faire en une seule passe avec A pour une boucle

p>

data = {key1: "value1", key2: "value2", key3: "value3", key4: "value4"}; 

keyMap = {key1: "firstkey", key2: "secondkey"};

const isDefined = x => typeof x !== 'undefined'

const renameKeys = o => {
  const newObj = {}
  for (const key in o) {
    if (isDefined(keyMap[key])) {
      newObj[keyMap[key]] = o[key]
    } else {
      newObj[key] = o[key]
    }
  }
  return newObj
}

console.log(
  renameKeys(data)
)


0 commentaires

1
votes

Je bouclerais sur les données et je vois si une clé existe. Si cela l'utilise, si vous n'utilisez pas la clé d'origine.

p>

var data = {
  key1: "value1",
  key2: "value2",
  key3: "value3",
  key4: "value4"
};

var keyMap = {
  key1: "firstkey",
  key2: "secondkey"
};


const updated = Object.entries(data).reduce((obj, [key, value]) => {
  const updatedKey = keyMap[key] || key
  obj[updatedKey] = value
  return obj
}, {})

console.log(updated);


0 commentaires

2
votes

Voici votre code avec une petite mise à jour: xxx


0 commentaires

1
votes

Le problème est que votre accumulateur dans votre fonction code> Réduire code> est un nouvel objet vide, et vous ne itération que sur les touches que vous souhaitez modifier.

Il y a beaucoup de façons faire ce que vous essayez de faire. Je trouve personnellement réduire code> déroutant pour analyser, alors je saute cela et faire quelque chose comme ceci: p> xxx pré>

Vous pouvez appliquer le même type de logique au réduire code> si vous vouliez vraiment le faire de cette façon, en itérant sur les données d'origine au lieu du KEYMAP: P>

const data = {key1: "value1", key2: "value2", key3: "value3", key4: "value4"}; 

const keyMap = {key1: "firstkey", key2: "secondkey"};

mappedData = Object.keys(data).reduce((obj,k) => Object.assign(obj, { [keyMap[k] || k]: data[k] }),{});

console.log(mappedData);


0 commentaires