Me gustaría eliminar ciertos miembros de un objeto (por razones de argumento, aquellos cuyas claves comienzan con '_'). ¿Cuál es una manera elegante de hacer esto? La forma ingenua sería:Buena expresión idiomática para filtrar miembros de un objeto (javascript)
for (var i in obj)
if (i[0] === '_')
delete obj[i];
pero eso modifica el objeto subyacente durante la iteración. En Nodo al menos supongo que pude
Object.keys(obj).forEach(function (i) { if (i[0] === '_') delete obj[i]; });
o reiniciar la iteración cada vez que algo se elimina con un bucle anidado incómoda.
¿Hay alguna solución mejor?
EDITAR: En las pruebas de ahora, al menos en node.js, la solución ingenua en realidad parece funcionar. Ciertamente es posible que ... en (se requiera) se implemente de forma segura. ¿Nadie sabe?
¿La modificación del objeto durante el bucle 'for ... in' causa un problema? No veo cómo es muy diferente a la modificación del objeto en la devolución de llamada 'forEach()', después de todo. – Pointy
Supongo que 'Object.keys' toma una instantánea de las claves en el objeto. Tal vez eso no es verdad. – Grumdrig
... y suponiendo que 'for (... in ...)' no toma una instantánea del objeto. – Grumdrig