Quiero usar el complemento select2 con el uso de templateResult y tiene un grupo de opciones en él, en la documentación dice que debemos seguir la matriz de patrones del objeto para que funcione. Ya estoy haciendo el patrón como se debe dar y el resultado del patrón es como quiero, pero para transformarlo en el resultado final, tomé muchos pasos. Cómo hacerlo más simple, hasta ahora en este código está bien, pero siento que muchos lo pisan para transformarme en lo que quiero.
Nota: la variable x es el resultado de la base de datos.
let x = [ {id_cp: 1, nama: 'Bank BJB', jenis: 'TB', path_gambar: '/assets/images/partners/bjb.png'}, {id_cp: 2, nama: 'Bank BJB Giro Payment', jenis: 'GI', path_gambar: '/assets/images/partners/bjb.png'}, {id_cp: 3, nama: 'CR Kantor Pusat', jenis: 'TN', path_gambar: '/assets/images/partners/tunai.png'}, {id_cp: 4, nama: 'Bank BSI', jenis: 'TB', path_gambar: '/assets/images/partners/bsi.png'}, {id_cp: 5, nama: 'Bank BRI', jenis: 'TB', path_gambar: '/assets/images/partners/bri.png'}, {id_cp: 6, nama: 'Dana', jenis: 'EW', path_gambar: '/assets/images/partners/dana.png'}, {id_cp: 7, nama: 'GoPay', jenis: 'EW', path_gambar: '/assets/images/partners/gopay.png'}, {id_cp: 8, nama: 'Bank BRI', jenis: 'QR', path_gambar: '/assets/images/partners/qris.png'} ]; function selectLabel(arr) { arr = arr.map(function (elments) { return { id: elments.id_cp, text: elments.nama, jenis: elments.jenis, path_gambar: elments.path_gambar }; }); const outputGrouped = Object.values(arr.reduce((accu, {jenis, ...rest}) => { if(!accu[jenis]) { accu[jenis] = {jenis, children: []}; } accu[jenis].children.push(rest); return accu; }, {})); // console.log(outputGrouped); const transformed = outputGrouped.map(({ jenis, children }) => ({ text: jenis, children: children })); // console.log(transformed); return transformed; } console.log(selectLabel(x));Entonces, ¿cómo transformar los datos de la variable x de manera más simple a partir de ese código con el mismo resultado, porque tomé 3 pasos del código de bloque?
Podrías cambiar el nombre en un paso directo.
let x = [ {id_cp: 1, nama: 'Bank BJB', jenis: 'TB', path_gambar: '/assets/images/partners/bjb.png'}, {id_cp: 2, nama: 'Bank BJB Giro Payment', jenis: 'GI', path_gambar: '/assets/images/partners/bjb.png'}, {id_cp: 3, nama: 'CR Kantor Pusat', jenis: 'TN', path_gambar: '/assets/images/partners/tunai.png'}, {id_cp: 4, nama: 'Bank BSI', jenis: 'TB', path_gambar: '/assets/images/partners/bsi.png'}, {id_cp: 5, nama: 'Bank BRI', jenis: 'TB', path_gambar: '/assets/images/partners/bri.png'}, {id_cp: 6, nama: 'Dana', jenis: 'EW', path_gambar: '/assets/images/partners/dana.png'}, {id_cp: 7, nama: 'GoPay', jenis: 'EW', path_gambar: '/assets/images/partners/gopay.png'}, {id_cp: 8, nama: 'Bank BRI', jenis: 'QR', path_gambar: '/assets/images/partners/qris.png'} ]; function selectLabel(array) { return Object.values(array.reduce((accu, { id_cp: id, jenis: text, nama, path_gambar }) => { (accu[text] ??= { text, children: [] }).children.push({ id, text: nama, path_gambar }); return accu; }, {})); } console.log(selectLabel(x)); .as-console-wrapper { max-height: 100% !important; top: 0; }