#javascript #arrays
#javascript #массивы
Вопрос:
У меня проблема, нужно сгруппировать некоторые данные.
Стоит упомянуть, что я использую underscore.js библиотека, но все, что угодно или любая помощь, поможет мне.
Также стоит упомянуть, что я работаю с node.js . Я бы очень хотел, чтобы кто-нибудь мне помог, потому что правда в том, что я совсем потерялся, и я уже пробовал и пробовал библиотеки, но я не могу найти что-то, что мне действительно помогает. Я думаю, мне нужно сделать группировку с помощью ._grouby, но это не привело ни к чему.
const data =
[ { Nombre: 'Juan 2', Fecha: '26/09/20', Seccion: 1, Detalle: { Colores: 'Dark', Valor: 'B1' }}
, { Nombre: 'Juan', Fecha: '25/09/20', Seccion: 1, Detalle: { Colores: 'Light', Valor: 'A1' }}
, { Nombre: 'Alberto 2', Fecha: '21/09/20', Seccion: 2, Detalle: { Colores: 'Blue', Valor: 'O1' }}
, { Nombre: 'Alberto', Fecha: '22/09/20', Seccion: 2, Detalle: { Colores: 'Orange', Valor: 'F9' }}
]
const expected_result =
[
{ Nombre: 'Juan 2'
, Fecha: '26/09/20'
, Seccion: 1
, Detalle:
[ { Colores: 'Dark', Valor: 'B1' }
, { Colores: 'Light', Valor: 'A1' }
]
}
, { Nombre: 'Alberto 2'
, Fecha: '21/09/20'
, Seccion: 2
, Detalle:
[ { Colores: 'Blue', Valor: 'O1' }
, { Colores: 'Orange', Valor: 'F9' }
]
}
]
Комментарии:
1. совет, выполните цикл над ним, создайте объект , ключ которого является значением
Seccion
, создайте или добавьте текущий элемент в массив детализации, затем выполните Object.values, чтобы получить конечный результат .. или повторите цикл и просматривайте каждый раз в текущем / результирующем массиве, что менее эффективно.2. Это какая-то головоломка, для которой нам нужно выяснить ваши критерии группировки? Потому что это действительно неочевидно, и вы этого не описали.
Ответ №1:
что я могу сказать? бесплатный код ?
const data =
[ { Nombre: 'Juan 2', Fecha: '26/09/20', Seccion: 1, Detalle: { Colores: 'Dark', Valor: 'B1' }}
, { Nombre: 'Juan', Fecha: '25/09/20', Seccion: 1, Detalle: { Colores: 'Light', Valor: 'A1' }}
, { Nombre: 'Alberto 2', Fecha: '21/09/20', Seccion: 2, Detalle: { Colores: 'Blue', Valor: 'O1' }}
, { Nombre: 'Alberto', Fecha: '22/09/20', Seccion: 2, Detalle: { Colores: 'Orange', Valor: 'F9' }}
]
const res = data.reduce((a,{ Detalle, ...rest } )=>
{
let el = a.find(x=>x.Seccion===rest.Seccion)
if(!el) a.push( el = {...rest, Detalle: [] });
el.Detalle.push({...Detalle})
return a
},[])
console.log( JSON.stringify(res,0,2))
.as-console-wrapper { max-height: 100% !important; top: 0; }
с помощью Defectos
:
const res = data.reduce((a,{ Detalle, Defectos, ...rest } )=>
{
let el = a.find(x=>x.Seccion===rest.Seccion)
if(!el) a.push( el = {...rest, Detalle: [], Defectos: [] });
el.Detalle.push({...Detalle})
el.Defectos.push({...Defectos})
return a
},[])
Комментарии:
1. Спасибо, мистер Джоджо, ваш код, ваш код решил мою проблему. !!! Большое спасибо. Итак, что, если у меня есть другое поле в качестве «Detalle», назовем его «Defectos», и оно также будет похоже на «Detalle», как бы я заполнил его вместе с деталями? Я имею в виду заполнить «Детали» и «Дефекты»