217 votes

Suppression de la propriété pour tous les objets du tableau

Je veux enlever le bad de chaque objet du tableau. Existe-t-il un meilleur moyen de le faire que d'utiliser un fichier for et le supprimer de chaque objet ?

var array = [{"bad": "something", "good":"something"},{"bad":"something", "good":"something"},...];

for (var i = 0, len = array.length; i < len; i++) {
  delete array[i].bad;
}

Il semble juste qu'il devrait y avoir un moyen d'utiliser prototype ou quelque chose comme ça. Je ne sais pas. Des idées ?

2voto

James Marks Points 183

Cette question date un peu, mais j'aimerais proposer une solution alternative qui ne modifie pas les données sources et qui nécessite un effort manuel minimal :

function mapOut(sourceObject, removeKeys = []) {
  const sourceKeys = Object.keys(sourceObject);
  const returnKeys = sourceKeys.filter(k => !removeKeys.includes(k));
  let returnObject = {};
  returnKeys.forEach(k => {
    returnObject[k] = sourceObject[k];
  });
  return returnObject;
}

const array = [
  {"bad": "something", "good":"something"},
  {"bad":"something", "good":"something"},
];

const newArray = array.map(obj => mapOut(obj, [ "bad", ]));

Ce n'est pas encore parfait, mais cela maintient un certain niveau d'immuabilité et offre la possibilité de nommer plusieurs propriétés que vous souhaitez supprimer. (Suggestions bienvenues)

1voto

Ankit Agarwal Points 23887

Je suggère d'utiliser Object.assign dans un forEach() boucle pour que les objets soient copiés et n'affecte pas le tableau d'objets original

var res = [];
array.forEach(function(item) { 
    var tempItem = Object.assign({}, item);
    delete tempItem.bad; 
    res.push(tempItem);
});
console.log(res);

1voto

Kanan Farzali Points 881

ES6 :

const newArray = array.map(({keepAttr1, keepAttr2}) => ({keepAttr1, newPropName: keepAttr2}))

1voto

Maicon Gilton Points 1

Cela fonctionne bien pour moi !

export function removePropertiesFromArrayOfObjects(arr = [], properties = []) {
return arr.map(i => {
    const newItem = {}
    Object.keys(i).map(key => {
        if (properties.includes(key)) { newItem[key] = i[key] }
    })
    return newItem
})
}

0voto

Mahdi Ta Points 54

Par réduction :

const newArray = oldArray.reduce((acc, curr) => {
  const { remove_one, remove_two, ...keep_data } = curr;
  acc.push(keep_data);
  return acc;
}, []);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X