用 Ramda 统一一个对象的信息
Unify information about an object with Ramda
我需要您的支持才能在 ramda 中生成以下结果。
我已经采取了一些方法并取得了这些结果,但现在我需要的是通过生成以下结果的 productCode 进行合并,其中 serviceType 将是一个按持续时间排序和关联的数组:
DATA
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
]
}
]
RESULT EXPECTED
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
]
}
]
我已经尝试制作此代码,但持续时间数组会在信息到来时随机保存它,我需要持续时间内的第一个安排用于 "Garantia Extendida",第二个用于 "Robo o Furto" 和知道如何识别它所属的期限安排,例如:
Duration: {GE: ['12', '24'], 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);
首先,请求:在发布更多问题之前,请阅读 How to create a Minimal, Reproducible Example。问题中的数据远远超过证明所请求行为所需的数据。数组中的条目比需要的多,而且它们的属性也比需要的多。在输入和所需输出之间来回滚动以尝试了解您在做什么非常乏味,我几乎要放弃了。
在下面的示例中,我减少了属性的数量,但保留了所有条目。其他属性对技术应该没有影响。
所以下次请先创建一个最小的例子再提问。谢谢!
我不太确定你的问题,但我认为这个示例可以满足你的要求:
const combineTypes = (
{serviceType: allTypes, ... base},
{id, serviceType, duration, ... rest}
) => ({
... rest,
serviceType: [... allTypes, serviceType],
... base,
[`duration_${serviceType.code}`]: duration
})
const transform = pipe (
groupBy (prop ('productCode')),
values,
map (reduce (combineTypes, {serviceType: []}))
)
const data = [{id: "ck5ii4ysl04vn0744z7liu0f3", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004593", duration: [24, 12]}, {id: "ck5ii4yr704vc0744sjw3tljd", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004593", duration: [12]}, {id: "ck5ii4yr704vc0744sjw3tljr", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004594", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f6", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004596", duration: [24, 12]}, {id: "ck5ii4ysl04vn0744z7liu0f0", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004595", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f1", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004596", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f2", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004597", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f4", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004594", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f5", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004595", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f9", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004597", duration: [24]}];
console .log (
transform (data)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.min.js"></script>
<script>const {pipe, groupBy, prop, values, map, reduce} = R </script>
(再次注意,并非您请求的所有属性都包含在输出中。如果它们在输入中,它们应该会正确显示。)
我们删除了其中的 id
s。数据对于不同的条目具有不同的 ID,并且没有明确的方法来组合它们。如果我们需要保留它们,我们可以做一些类似于 serviceType
.
的事情
核心在combineTypes
函数,在transform
管道中提供给reduce
。 transform
是标准的Ramda代码,我觉得应该比较清楚了。
如果这不能满足您的要求,请在问题中添加一些说明或作为评论。
我是这样得到的:
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);
很明显它的造型干净多了,kkkkkkk....谢谢
我需要您的支持才能在 ramda 中生成以下结果。
我已经采取了一些方法并取得了这些结果,但现在我需要的是通过生成以下结果的 productCode 进行合并,其中 serviceType 将是一个按持续时间排序和关联的数组:
DATA
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
]
}
]
RESULT EXPECTED
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
]
}
]
我已经尝试制作此代码,但持续时间数组会在信息到来时随机保存它,我需要持续时间内的第一个安排用于 "Garantia Extendida",第二个用于 "Robo o Furto" 和知道如何识别它所属的期限安排,例如:
Duration: {GE: ['12', '24'], 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);
首先,请求:在发布更多问题之前,请阅读 How to create a Minimal, Reproducible Example。问题中的数据远远超过证明所请求行为所需的数据。数组中的条目比需要的多,而且它们的属性也比需要的多。在输入和所需输出之间来回滚动以尝试了解您在做什么非常乏味,我几乎要放弃了。
在下面的示例中,我减少了属性的数量,但保留了所有条目。其他属性对技术应该没有影响。
所以下次请先创建一个最小的例子再提问。谢谢!
我不太确定你的问题,但我认为这个示例可以满足你的要求:
const combineTypes = (
{serviceType: allTypes, ... base},
{id, serviceType, duration, ... rest}
) => ({
... rest,
serviceType: [... allTypes, serviceType],
... base,
[`duration_${serviceType.code}`]: duration
})
const transform = pipe (
groupBy (prop ('productCode')),
values,
map (reduce (combineTypes, {serviceType: []}))
)
const data = [{id: "ck5ii4ysl04vn0744z7liu0f3", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004593", duration: [24, 12]}, {id: "ck5ii4yr704vc0744sjw3tljd", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004593", duration: [12]}, {id: "ck5ii4yr704vc0744sjw3tljr", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004594", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f6", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004596", duration: [24, 12]}, {id: "ck5ii4ysl04vn0744z7liu0f0", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004595", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f1", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004596", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f2", serviceType: {code: "GE", description: "descrição da garantia estendida"}, productCode: "4004597", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f4", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004594", duration: [12]}, {id: "ck5ii4ysl04vn0744z7liu0f5", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004595", duration: [24]}, {id: "ck5ii4ysl04vn0744z7liu0f9", serviceType: {code: "RF", description: "descrição SEGURO ROUBO OU FURTO"}, productCode: "4004597", duration: [24]}];
console .log (
transform (data)
)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.min.js"></script>
<script>const {pipe, groupBy, prop, values, map, reduce} = R </script>
(再次注意,并非您请求的所有属性都包含在输出中。如果它们在输入中,它们应该会正确显示。)
我们删除了其中的 id
s。数据对于不同的条目具有不同的 ID,并且没有明确的方法来组合它们。如果我们需要保留它们,我们可以做一些类似于 serviceType
.
核心在combineTypes
函数,在transform
管道中提供给reduce
。 transform
是标准的Ramda代码,我觉得应该比较清楚了。
如果这不能满足您的要求,请在问题中添加一些说明或作为评论。
我是这样得到的:
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);
很明显它的造型干净多了,kkkkkkk....谢谢