Wrap in object
Something like this is a little cleaner
const obj = { X: 'dataX', Y: 'dataY', //... } const list = { A: true && 'dataA', B: false && 'dataB', C: 'A' != 'B' && 'dataC', D: 2000 < 100 && 'dataD', // E: conditionE && 'dataE', // F: conditionF && 'dataF', //... } Object.keys(list).map(prop => list[prop] ? obj[prop] = list[prop] : null)
Wrap in an array
Or, if you want to use the Jamie Hill method and have a very long list of conditions, you have to write ... syntax several times. To make it a little cleaner, you can simply wrap them in an array and then use reduce() to return them as a single object.
const obj = { X: 'dataX', Y: 'dataY', //... ...[ true && { A: 'dataA'}, false && { B: 'dataB'}, 'A' != 'B' && { C: 'dataC'}, 2000 < 100 && { D: 'dataD'}, // conditionE && { E: 'dataE'}, // conditionF && { F: 'dataF'}, //... ].reduce(( v1, v2 ) => ({ ...v1, ...v2 })) }
Or using the map() function
const obj = { X: 'dataX', Y: 'dataY', //... } const array = [ true && { A: 'dataA'}, false && { B: 'dataB'}, 'A' != 'B' && { C: 'dataC'}, 2000 < 100 && { D: 'dataD'}, // conditionE && { E: 'dataE'}, // conditionF && { F: 'dataF'}, //... ].map(val => Object.assign(obj, val))
Dedy Abdillah May 6 '19 at 12:38 PM-05-05-06 12:38
source share