Je veux supprimer le "mauvais" attribut de chaque objet du tableau. Y a-t-il une meilleure façon de le faire que d’utiliser une boucle for et de la 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 un prototype, ou quelque chose du genre. Je ne sais pas. Des idées?
Les seuls autres moyens sont cosmétiques et sont en fait des boucles.
Par exemple :
array.forEach(function(v){ delete v.bad });
Notez que si vous voulez être compatible avec IE8, vous aurez besoin de un adaptateur pour forEach . Comme vous le mentionnez prototype, prototype.js a également a une cale .
Avec ES6, vous pouvez déconstruire chaque objet pour en créer un nouveau sans attributs nommés:
const newArray = array.map(({dropAttr1, dropAttr2, ...keepAttrs}) => keepAttrs)
Je préfère utiliser map pour supprimer la propriété, puis renvoyer le nouvel élément de tableau.
array.map(function(item) {
delete item.bad;
return item;
});
Si vous utilisez underscore.js :
var strippedRows = _.map(rows, function (row) {
return _.omit(row, ['bad', 'anotherbad']);
});
Une solution utilisant des prototypes n'est possible que lorsque vos objets se ressemblent:
function Cons(g) { this.good = g; }
Cons.prototype.bad = "something common";
var array = [new Cons("something 1"), new Cons("something 2"), …];
Mais alors c'est simple (et O(1)
):
delete Cons.prototype.bad;
Je suggérerai d'utiliser Object.assign
dans une boucle forEach()
pour que les objets soient copiés et n'affectent pas le tableau d'origine d'objets
var res = [];
array.forEach(function(item) {
var tempItem = Object.assign({}, item);
delete tempItem.bad;
res.Push(tempItem);
});
console.log(res);