He estado tratando de reescribir el método _.defaults de underscore.js y sigo recibiendo este error:
debe copiar las propiedades de origen a propiedades indefinidas en el objeto de destino‣ AssertionError: esperado { a: 'existente' } para igualar profundamente { a: 'existente', b: 2, c: 3, d: 4 }
Aquí están las condiciones que faltan:
-debe copiar las propiedades de origen a propiedades no definidas en el objeto de destino y debe devolver el objeto de destino
y mi codigo:
_.defaults = function (destination, source) { Object.keys(destination).forEach(key => { if (destination[key] === undefined || destination[key] === null) { destination[key] = source[key]; } }) return destination; };La idea en _.defaults es que las claves del objeto de origen pueden faltar por completo en el objeto de destino. Por lo tanto, debe iterar las claves del objeto de origen en lugar de las del objeto de destino:
_.defaults = function (destination, source) { Object.keys(source).forEach(key => { if (destination[key] === undefined || destination[key] === null) { destination[key] = source[key]; } }) return destination; }; Nota al margen: puede escribir x == null en lugar de x === null || x === undefined . Ahorra algunas preciosas pulsaciones de teclas.
_.defaults = function (destination, source) { Object.keys(source).forEach(key => { if (destination[key] == null) { destination[key] = source[key]; } }) return destination; };