1
votes

Itérer les clés d'objet pour remplacer celle sélectionnée par les clés souhaitées à l'aide des fonctions de tableau es6

J'ai besoin de remplacer les clés disponibles par les clés souhaitées dans un objet pour lequel j'essayais d'exécuter le code ci-dessous, ce que j'ai découvert plus tard comme une utilisation incorrecte du filtre pour la sortie souhaitée. donc j'ai besoin d'aide pour obtenir les résultats souhaités en utilisant les fonctions de tableau es6.

columns{
  abc:"djfhdjf",
  xyz:"ssss",
  Pranav:"onename",
  Alex:"somename",
  sometingelse:'somevalue'
}

Ici, le someArray est comme ci-dessous:

someArray{
  abc:"djfhdjf",
  xyz:"ssss",
  MyName:"onename",
  YourName:"somename",
  sometingelse:'somevalue'
}


1 commentaires

Ce que vous demandez n'est pas clair ou, du moins, c'est assez vague et peut être résolu de différentes manières. Afin de vous donner un point de départ, vous pouvez plutôt penser à combiner l ' opérateur de diffusion (...) avec array.map : jsfiddle.net/ve3zgbft Sinon, vous pouvez penser à combiner filter et forEach (n'oubliez pas de supprimer l'ancienne clé, cependant)


5 Réponses :


2
votes

Vous pouvez filtrer les clés voulues pour le remplacement et remplacer les clés en utilisant une nouvelle clé et en supprimant l'ancienne.

const
    object = { abc: "djfhdjf", xyz: "ssss", MyName: "onename", YourName: "somename", sometingelse: 'somevalue' },
    replacements = { MyName: 'Pranav', YourName: 'Alex', sometingelse: '' },
    result = Object.assign(...Object
        .entries(object)
        .map(([k, v]) => ({ [k in replacements ? replacements[k] : k]: v }))
    );
  
console.log(result);

Pour générer un objet, vous pouvez mapper de nouveaux objets et les affecter à un seul objet.

const
    object = { abc: "djfhdjf", xyz: "ssss", MyName: "onename", YourName: "somename", sometingelse: 'somevalue' },
    replacements = { MyName: 'Pranav', YourName: 'Alex', sometingelse: '' };

Object
    .keys(object)
    .filter(k => k in replacements)
    .forEach(k => {
        object[replacements[k]] = object[k];
        delete object[k];
    });
  
console.log(object);


1 commentaires

Pas sûr de cela mais mon eslint dit "Affectation à la propriété du paramètre de fonction 'objet'".



0
votes

J'exécute une réduction sur les clés d'un tableau en commençant par un objet vide. Le ... acc répartit toutes les propriétés dans l'objet réduit. ... {[keysMap [clé] || key]: obj [key]} vérifie si la clé courante est présente dans keysMap.Si elle est présente, il utilise cette clé (keysMap [key]) sinon il utilise simplement les clés de l'objet existant. (|| key). J'espère que cela a du sens

    const renameKeys = (keysMap, obj) =>
       Object.keys(obj).reduce(
        (acc, key) => ({
          ...acc,
          ...{ [keysMap[key] || key]: obj[key] }
       }),
    {}
  )
  const columns = renameKeys({'MyName':'Pranav','YourName':'Alex'},someArray)


2 commentaires

J'exécute une réduction sur les clés d'un tableau en commençant par un objet vide. Le ... acc répartit toutes les propriétés dans l'objet réduit. ... {[keysMap [clé] || key]: obj [key]} vérifie si la clé courante est présente dans keysMap.Si elle est présente, il utilise cette clé (keysMap [key]) sinon il utilise simplement les clés de l'objet existant. (|| key). J'espère que cela a du sens


@ anuragb26 .. Mettez votre extrait d'explication sage (si possible) dans votre réponse en le modifiant.



0
votes

Voici mon approche, une solution un peu longue, mais c'est exprès pour que vous puissiez voir comment le faire simplement sans trop d'abstraction:

const someArray = {
abc:"djfhdjf",
xyz:"ssss",
MyName:"onename",
YourName:"somename",
sometingelse:'somevalue'
}


let foo = Object.keys(someArray).map(key => {
  if(key === 'MyName') {
    return 'Alex'
  } else if(key === 'YourName') {
    key = 'Pranav'
  }
  return key;
})

let bar = Object.entries(someArray).map((el, i) => {
  el[0] = res[i];
  return el;
})

let baz = r.reduce((acc, el)=>{
  acc[`${el[0]}`] = el[1];
  return acc;
},{})
console.log(baz);


0 commentaires

1
votes

const obj = {
  abc: 'djfhdjf',
  xyz: 'ssss',
  MyName: 'onename',
  YourName: 'somename',
  sometingelse: 'somevalue'
};

const newObj = Object.keys(obj).reduce((acc, key) => {
  if (key === 'MyName') {
  	acc.newMyName = obj[key];
  } else if (key === 'YourName') {
  	acc.newYourName = obj[key];
  } else {
  	acc[key] = obj[key];
  }
  
  return acc;
}, {});

console.log('newObj = ', newObj);


0 commentaires

0
votes

Vous pouvez utiliser .reduce comme ceci. Il utilise une idée similaire que Nina a proposée en utilisant un objet pour contenir vos remplaçants. Ici, j'ai utilisé la syntaxe de propagation pour ajouter la clé modifiée à l'objet accumulé, avec sa valeur associée.

const someArray = {abc: "djfhdjf", xyz: "ssss", MyName: "onename", YourName: "somename", sometingelse: 'somevalue'},
toUse = {MyName: "Pranav", YourName: "Alex"}, // define the keys you want to change and what they should change to

res = Object.keys(someArray).reduce((acc, key) => 
    ({...acc, [key in toUse ? toUse[key] : key]:someArray[key]})
, {});
console.log(res);


0 commentaires