2010-07-21 18 views
5

así que escribir una función corta para eliminar miembros de un objeto que tienen valores Falsy:falsies Extracción de objeto JavaScript

for (var key in object) { 
    if (!object[key]) { 
     delete object[key]; 
    } 
} 

Un par de días más tarde comprobación de control de fuente y alguien ha cambiado esto:

var newObject = {}; 
for (var key in object) { 
    if (object[key]) { newObject[key] = object[key]; } 
} 
return newObject; 

No hay comentarios sobre el check-in y el tipo no está aquí hoy en el trabajo.

¿Qué implementación es mejor? ¿Cuáles son las implicaciones de rendimiento de cada método?

Respuesta

3

No puede eliminar una propiedad de un objeto heredado de un prototipo. Entonces, en algunos casos, es posible que su código no funcione como se esperaba.

Source

2

No se puede delete una propiedad de un objeto que hereda de una prototype (aunque se puede eliminar directamente en el prototipo).

En el segundo ejemplo, una propiedad Falsy heredado de un prototype no se copiará a la newObject.

Más información:

0

creo que tu código lee mucho más intuitiva. Tal vez simplemente no quería cambiar el objeto original?

+0

No es cierto, ver las respuestas de Daniel y de Yacoby. –

+2

Esas respuestas y las mías no son mutuamente excluyentes. Bueno, al menos pueden no serlo. No tenemos suficiente contexto para tomar una determinación. –

1

Usando Lo-Dash, consideran que esta aplicación (usando _.pick):

var newObject = _.pick(object, function onlyTruthy(val, key) { 
    return !!val; 
});