El siguiente código logra el resultado deseado. ¿Hay una manera más elegante de hacer esto?
Por ejemplo, ¿hay alguna función javascript nativa como flatMap
etc. que pueda ayudar?
(Sé que podría deshacerme de las pieces
variables intermedias).
const config = { fieldName1: { validation: "schema1", value: "abcvalue here" }, fieldName2: { validation: "schema2", value: "abcvalue here" }, } // Desired output: // { // fieldName1: "schema1", // fieldName2: "schema2", // ... // } const extractValidation = (config) => { const pieces = Object.entries(config).map( ([key, val]) => ({ [key]: val.validation }) ) return Object.assign({}, ...pieces) } extractValidation(config)
Es más conciso, y creo que más bonito, emparejar fromEntries
con un mapa sobre .entries
.
const config = { fieldName1: { validation: "schema1", value: "abcvalue here" }, fieldName2: { validation: "schema2", value: "abcvalue here" }, } const extractValidation = (config) => Object.fromEntries( Object.entries(config).map(([k,v]) => [k, v.validation]) ); console.log(extractValidation(config))
Una alternativa es usar reduce
para que pueda omitir Object.assign
:
Object.entries(config).reduce((o, [k, v]) => (o[k] = v.validation, o), {}) //=> {fieldName1: 'schema1', fieldName2: 'schema2'}
así es como lo haría. Al aprovechar Ramda, puede ir sin puntos y usar el map
para cualquier Functor
const fn = R.map(R.prop('validation')); const data = { fieldName1: { validation: "schema1", value: "abcvalue here" }, fieldName2: { validation: "schema2", value: "abcvalue here" }, }; console.log( fn(data), );
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.28.0/ramda.js" integrity="sha512-ZZcBsXW4OcbCTfDlXbzGCamH1cANkg6EfZAN2ukOl7s5q8skbB+WndmAqFT8fuMzeuHkceqd5UbIDn7fcqJFgg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>