Javascript 使用Ramda统一有关对象的信息
我需要你的支持,在ramda中生成以下结果 我已经做了一些工作,并取得了这些结果,但现在我需要的是由productCode合并,生成以下结果,其中serviceType将是一个按持续时间排序和关联的数组: 资料 预期结果 我已经尝试了这段代码,但是持续时间数组会随机保存它,因为信息即将到来,我需要持续时间内的第一个安排是“Garantia Extendida”,第二个是“Robo o Furto”,并且知道如何识别它所属的持续时间安排,例如: 持续时间:{GE:['12','24'],RF:['24']}Javascript 使用Ramda统一有关对象的信息,javascript,arrays,reduce,ramda.js,Javascript,Arrays,Reduce,Ramda.js,我需要你的支持,在ramda中生成以下结果 我已经做了一些工作,并取得了这些结果,但现在我需要的是由productCode合并,生成以下结果,其中serviceType将是一个按持续时间排序和关联的数组: 资料 预期结果 我已经尝试了这段代码,但是持续时间数组会随机保存它,因为信息即将到来,我需要持续时间内的第一个安排是“Garantia Extendida”,第二个是“Robo o Furto”,并且知道如何识别它所属的持续时间安排,例如: 持续时间:{GE:['12','24'],RF:['
首先,一个请求:在发布更多问题之前,请阅读。问题中的数据远远超过了证明所需行为所需的数据。数组中的条目比需要的多,并且它们的属性比需要的多得多。在输入和所需输出之间来回滚动以试图理解您正在做的事情已经够乏味的了,我几乎放弃了 在下面的示例中,我减少了属性的数量,但保留了所有条目。附加属性应该对技术没有影响 所以下一次,请在提问之前创建一个最小的示例。谢谢
我对您的问题没有足够的把握,但我认为此示例符合您的要求:
const组合类型=(
{serviceType:allTypes,…base},
{id,serviceType,duration,…rest}
) => ({
休息
serviceType:[…所有类型,serviceType],
基础
[`duration\${serviceType.code}`]:持续时间
})
常量转换=管道(
groupBy(prop('productCode')),
价值观
映射(reduce(组合类型,{serviceType:[]}))
)
const data=[{id:“ck5ii4ysl04vn0744z7liu0f3”,服务类型:{code:“RF”,description:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004593”,持续时间:[24,12]},{id:“ck5ii4yr704vc0744sjw3tljd”,服务类型:{code:“GE”,description:“description:“descriptionço da garantia estendida”},产品代码:“4004593”,持续时间:[12]},id:“ck5ii4yr704vc0744sjw3tljr”,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004594”,持续时间:[24]},{id:“ck5ii4ysl04vn0744z7liu0f6”,服务类型:{代码:“RF”,描述:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004596”,持续时间:[24,12]},{id:“ck5ii4ysl04vn0744z7liu0f0,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004595”,持续时间:[12]},{id:“ck5ii4ysl04vn0744z7liu0f1”,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004596”,持续时间:[12]},id:“ck5ii4ysl04vn0744z7liu0f2”,服务类型:{代码:“GE”,描述:“descriptionão da garantia Estendia”},产品代码:“4004597”,持续时间:[24]},{id:“ck5ii4ysl04vn0744z7liu0f4”,服务类型:{代码:“RF”,描述:“descriptionão SEGURO ROUBO OU FURTO”},产品代码:“4004594”,持续时间:[12]},id:“ck5ii4ysl04vn0744z7liu0f5”,服务类型:{代码:“RF”,描述:“descriptionão SEGURO ROUBO FURTO”},产品代码:“4004595”,持续时间:[24]},{id:“ck5ii4ysl04vn0744z7liu0f9”,服务类型:{代码:“RF”,描述:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004597”,持续时间:[24]};
控制台日志(
转换(数据)
)
const{pipe,groupBy,prop,values,map,reduce}=R
首先,请求:在发布进一步的问题之前,请阅读。问题中的数据远多于演示请求行为所需的数据。数组中的条目比需要的多,它们的属性也比需要的多。在输入和我想要的结果是试图理解你在做什么,这已经够乏味的了,以至于我几乎放弃了
在下面的示例中,虽然保留了所有条目,但我减少了属性的数量。附加属性应该不会对技术产生任何影响
所以下一次,请在提问之前创建一个最小的示例。谢谢
我对您的问题没有足够的把握,但我认为此示例符合您的要求:
const组合类型=(
{serviceType:allTypes,…base},
{id,serviceType,duration,…rest}
) => ({
休息
serviceType:[…所有类型,serviceType],
基础
[`duration\${serviceType.code}`]:持续时间
})
常量转换=管道(
groupBy(prop('productCode')),
价值观
映射(reduce(组合类型,{serviceType:[]}))
)
const data=[{id:“ck5ii4ysl04vn0744z7liu0f3”,服务类型:{code:“RF”,description:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004593”,持续时间:[24,12]},{id:“ck5iii4yr704vc0744sjw3tljd”,服务类型:{code:“GE”,description:“description:“descriptionço da garantia estendidack5ii4yr704vc0744sjw3tljr”,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004594”,持续时间:[24]},{id:“ck5ii4ysl04vn0744z7liu0f6”,服务类型:{代码:“RF”,描述:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004596”,持续时间:[24,12]},{id:“ck5ii4ysl04vn0744z7liu0f0”,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004595”,持续时间:[12]},{id:“ck5ii4ysl04vn0744z7liu0f1”,服务类型:{代码:“GE”,描述:“descriptionço da garantia Estendia”},产品代码:“4004596”,持续时间:[12]},{id:“ck5ii4ysl04vn0744z7liu0f2”,服务类型:{代码:“GE”,描述:descriptionço da garantia Estendia“},产品代码:“4004597”,持续时间:[24]},id:“ck5ii4ysl04vn0744z7liu0f4”,服务类型:{代码:“RF”,描述:“descriptionço SEGURO ROUBO OU FURTO”},产品代码:“4004594”,持续时间:[12]},id:“ck5ii4ysl04vn0744z7liu0f5”,服务类型:{代码:“RF”,描述:“descriptionço SEGURO”
data = [
{
"id": "ck5ii4ysl04vn0744z7liu0f3",
"pdvIntegrationStatus": "WAITING",
"sapIntegrationStatus": "WAITING",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"serviceType": {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
},
"productCode": "4004593",
"duration": [
24,
12
]
},
{
"id": "ck5ii4yr704vc0744sjw3tljd",
"pdvIntegrationStatus": "WAITING",
"sapIntegrationStatus": "WAITING",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"serviceType": {
"code": "GE",
"description": "descrição da garantia estendida"
},
"productCode": "4004593",
"duration": [
12
]
},
{
"id": "ck5ii4yr704vc0744sjw3tljr",
"pdvIntegrationStatus": "INTEGRATED",
"sapIntegrationStatus": "INTEGRATED",
"updatedAt": "2020-01-18T15:34:09.000Z",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"serviceType": {
"code": "GE",
"description": "descrição da garantia estendida"
},
"productCode": "4004594",
"duration": [
24
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f6",
"pdvIntegrationStatus": "WAITING",
"sapIntegrationStatus": "INTEGRATED",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"serviceType": {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
},
"productCode": "4004596",
"duration": [
24,
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f0",
"pdvIntegrationStatus": "INTEGRATED",
"sapIntegrationStatus": "WAITING",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"serviceType": {
"code": "GE",
"description": "descrição da garantia estendida"
},
"productCode": "4004595",
"duration": [
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f1",
"pdvIntegrationStatus": "INTEGRATED",
"sapIntegrationStatus": "INTEGRATED",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"serviceType": {
"code": "GE",
"description": "descrição da garantia estendida"
},
"productCode": "4004596",
"duration": [
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f2",
"pdvIntegrationStatus": "INTEGRATED",
"sapIntegrationStatus": "INTEGRATED",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "VENT",
"description": "Ventiladores"
},
"serviceType": {
"code": "GE",
"description": "descrição da garantia estendida"
},
"productCode": "4004597",
"duration": [
24
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f4",
"pdvIntegrationStatus": "INTEGRATED",
"sapIntegrationStatus": "INTEGRATED",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"serviceType": {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
},
"productCode": "4004594",
"duration": [
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f5",
"pdvIntegrationStatus": "WAITING",
"sapIntegrationStatus": "WAITING",
"updatedAt": "2020-01-17T18:34:13.075Z",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"serviceType": {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
},
"productCode": "4004595",
"duration": [
24
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f9",
"pdvIntegrationStatus": "WAITING",
"sapIntegrationStatus": "WAITING",
"updatedAt": "2020-01-17T15:34:13.000Z",
"category": {
"code": "VENT",
"description": "Ventiladores"
},
"serviceType": {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
},
"productCode": "4004597",
"duration": [
24
]
}
]
resultExpected = [
{
"id": "ck5ii4ysl04vn0744z7liu0f3",
"productCode": "4004593",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"updatedAt": "2020-01-17T18:34:13.075Z",
"pdvIntegrationStatus": false,
"sapIntegrationStatus": false,
"serviceType": [
{
"code": "GE",
"description": "descrição da garantia estendida"
},{
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
}
],
"duration_GE": [
12
],
"duration_RF": [
24,
12
]
},
{
"id": "ck5ii4yr704vc0744sjw3tljr",
"productCode": "4004594",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"updatedAt": "2020-01-18T15:34:09.000Z",
"pdvIntegrationStatus": true,
"sapIntegrationStatus": true,
"serviceType": [
{
"code": "GE",
"description": "descrição da garantia estendida"
},
{
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
}
],
"duration_GE": [
12
],
"duration_RF": [
24
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f0",
"productCode": "4004595",
"category": {
"code": "CEL",
"description": "Celular e Smartphones"
},
"updatedAt": "2020-01-17T18:34:13.075Z",
"pdvIntegrationStatus": true,
"sapIntegrationStatus": false,
"serviceType": [
{
"code": "GE",
"description": "descrição da garantia estendida"
},
{
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
}
],
"duration_GE": [
24
],
"duration_RF": [
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f6",
"productCode": "4004596",
"category": {
"code": "DUC",
"description": "Duchas e chuveiros"
},
"updatedAt": "2020-01-17T18:34:13.075Z",
"pdvIntegrationStatus": false,
"sapIntegrationStatus": true,
"serviceType": [
{
"code": "GE",
"description": "descrição da garantia estendida"
}, {
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
}
],
"duration_GE": [
12
],
"duration_RF": [
24,
12
]
},
{
"id": "ck5ii4ysl04vn0744z7liu0f2",
"productCode": "4004597",
"category": {
"code": "VENT",
"description": "Ventiladores"
},
"updatedAt": "2020-01-17T18:34:13.075Z",
"pdvIntegrationStatus": true,
"sapIntegrationStatus": true,
"serviceType": [
{
"code": "GE",
"description": "descrição da garantia estendida"
},
{
"code": "RF",
"description": "descrição SEGURO ROUBO OU FURTO"
}
],
"duration_GE": [
24
],
"duration_RF": [
24
]
}
]
> const groupByTransaction = R.groupBy(R.prop('productCode'));
> const mergeToObject = (rows) => Object.values(rows).map( item => ( { ...R.pickAll(['id'], item[0]), ...R.pickAll(['productCode'], item[0]), ...R.pickAll(['category'],
> item[0]), ...R.pickAll(['updatedAt'], item[0]),
> pdvIntegrationStatus: R.contains(R.pluck('pdvIntegrationStatus',
> item)[0], 'INTEGRATED'), sapIntegrationStatus:
> R.contains(R.pluck('sapIntegrationStatus', item)[0], 'INTEGRATED'),
> serviceType: R.pluck('serviceType', item), duration_GE:
> (R.pluck('duration', item))[1], duration_RF: (R.pluck('duration',
> item))[0] } ));
> const hasDuplicates = R.pipe( groupByTransaction, mergeToObject );
>
> rows = hasDuplicates(rows);
const mergeToObject = (rows) => Object.values(rows).map(item => ( {
...R.pickAll(['id'], item[0]),
...R.pickAll(['productCode'], item[0]),
...R.pickAll(['category'], item[0]),
...R.pickAll(['updatedAt'], item[0]),
pdvIntegrationStatus: R.contains(R.pluck('pdvIntegrationStatus', item)[0], 'INTEGRATED') &&
R.contains(R.pluck('pdvIntegrationStatus', item)[1], 'INTEGRATED'),
sapIntegrationStatus: R.contains(R.pluck('sapIntegrationStatus', item)[0], 'INTEGRATED') &&
R.contains(R.pluck('sapIntegrationStatus', item)[1], 'INTEGRATED'),
serviceType_GE: R.contains((R.pluck('serviceType', item), 'GE'))?'descrição da garantia estendida':'',
serviceType_RF: R.contains((R.pluck('serviceType', item), 'RF'))?'descrição SEGURO ROUBO OU FURTO':'',
duration_GE: (item[0].serviceType.code === 'GE') ?
R.sort(sortByDuration, (R.pluck('duration', item))[0]) :
((R.pluck('duration', item))[1])?R.sort(sortByDuration, (R.pluck('duration', item))[1]):[] || [],
duration_RF: (item[0].serviceType.code === 'RF') ?
R.sort(sortByDuration, (R.pluck('duration', item))[0]) :
((R.pluck('duration', item))[1])?R.sort(sortByDuration, (R.pluck('duration', item))[1]):[] || []
} ));
const hasDuplicates = R.pipe( groupByTransaction, mergeToObject );
rows = hasDuplicates(rows);