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' }
5 Réponses :
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);
Pas sûr de cela mais mon eslint dit "Affectation à la propriété du paramètre de fonction 'objet'".
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)
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.
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);
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);
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);
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)