I want to reformat an array but result is not correct. Please check my code first.
var items = [ { room_type : 'Room A', product_type : 'Product Type X', formula : '10', }, { room_type : 'Room A', product_type : 'Product Type Y', formula : '20', }, { room_type : 'Room B', product_type : 'Product Type Z', formula : '30', }, ]; var new_items = []; var obj = []; $.each(items, function (i, data) { var room_type = data.room_type; var product_type = data.product_type; var formula = data.formula; obj[product_type] = []; obj[product_type]['formula'] = formula; new_items[room_type] = obj; }); console.log(new_items);
From my example There are duplicate Room Type A I want to re-format like
var new_items = [ 'Room A' : { 'Product Type X' : {formula : '10'}, 'Product Type Y' : {formula : '20'} }, 'Room B' : { 'Product Type Z' : {formula : '30'} } ];
but result of my code is duplicate. Thank you for help.
Advertisement
Answer
You need an object as result and add the properties from the object.
var items = [{ room_type: 'Room A', product_type: 'Product Type X', formula: '10' }, { room_type: 'Room A', product_type: 'Product Type Y', formula: '20' }, { room_type: 'Room B', product_type: 'Product Type Z', formula: '30' }], result = items.reduce((r, o) => { ['room_type', 'product_type'] .reduce((q, k) => q[o[k]] = q[o[k]] || {}, r) .formula = o.formula; return r; }, {}); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }