NEXT_OFFSET记录数组



我试图得到数组的元素,我得到数组的代码:

const result = payload.map(({QUALITY, TEMPERATURE, SENSOR_READING_DATETIME, SOURCE_COMPONENT_ID, SENSOR_NAME, NEXT_OFFSET})=> ({
TELEMATICS: {
QUALITY,
TEMPERATURE
},
SOURCE_COMPONENT_ID,
SENSOR_NAME,
SENSOR_READING_DATETIME,
NEXT_OFFSET
}));

结果是这样的:

{
data": [
{
"TELEMATICS": {
"QUALITY": 91.98,
"TEMPERATURE": 20.5
},
"id": 118,
"SENSOR_READING_DATETIME": "2021-09-24T04:53:06.801Z",
"SOURCE_COMPONENT_ID": 1,
"SENSOR_NAME": "TD2",
"NEXT_OFFSET": 119
}
,
{
"TELEMATICS": {
"QUALITY": 91.98,
"TEMPERATURE": 20.5
},
"id": 119,
"SENSOR_READING_DATETIME": "2021-09-24T05:53:09.774Z",
"SOURCE_COMPONENT_ID": 1,
"SENSOR_NAME": "TD2",
"NEXT_OFFSET": 120
}
]
}

但我试图得到NEXT_OFFSET元素之外,只有最后一个记录的数组。

它必须看起来像这个例子:

{
data": [
{
"TELEMATICS": {
"QUALITY": 91.98,
"TEMPERATURE": 20.5
},
"id": 118,
"SENSOR_READING_DATETIME": "2021-09-24T04:53:06.801Z",
"SOURCE_COMPONENT_ID": 1,
"SENSOR_NAME": "TD2"
}
,
{
"TELEMATICS": {
"QUALITY": 91.98,
"TEMPERATURE": 20.5
},
"id": 119,
"SENSOR_READING_DATETIME": "2021-09-24T05:53:09.774Z",
"SOURCE_COMPONENT_ID": 1,
"SENSOR_NAME": "TD2"
}
]
"NEXT_OFFSET": 120
}

我怎么能做到这一点,就像在例子中?

您可以使用Array.reduce来累积您的结果,并在点击最后一项时添加额外的字段。如果您将额外属性的初始值设置为null,它也会处理您的"无结果"情况。

一个简化的版本是这样的:

const payload = [
{ a: 1, b: 2 },
{ a: 5, b: 6 },
{ a: 10, b: 11 }
];
const res = payload.reduce(
(acc, { a, b }, index) =>
index === payload.length - 1
? { ...acc, data: [...acc.data, a],b }
: { ...acc, data: [...acc.data, a] },
{ data: [], b:null }
);
console.log(res);

对于你的例子,如果你正在获取REQUEST_COUNT项目的批次(例如2000),它可能看起来像这样:

const res = payload.reduce(
(acc, { NEXT_OFFSET, ...item }, index) => {
const data = [...acc.data, item];
if (index < payload.length - 1) {
return { data };
} else {
const nextOffset =
payload.length < REQUEST_COUNT
? { NEXT_OFFSET: null }
: { NEXT_OFFSET 
return {data, ...nextOffset}
}
},
{ data: [], NEXT_OFFSET: null }
);

最新更新