【问题标题】:NEXT_OFFSET records of array数组的 NEXT_OFFSET 记录
【发布时间】:2021-12-05 06:59:11
【问题描述】:

我尝试获取元素数组并使用以下代码获取数组:

 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
    }

我怎样才能做到,就像在示例中一样?

【问题讨论】:

  • NEXT_OFFSET有多个值,数组中每个元素一个,如何决定出现哪一个?
  • @EldarB。 - 这个数组有显示记录的限制 - 2000;我从这个数组中取出最后一条记录 NEXT_OFFSET 。如果没有记录 - null .

标签: javascript arrays json pagination


【解决方案1】:

您可以使用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 }
);

【讨论】:

  • 谢谢!其作品。但是,如果没有更多记录,我如何在 NEXT_OFFSET 处获得 NULL 呢?
  • @NikitaAlekseev - 已更新...设置 NEXT_OFFSET:null 为初始值。如果有结果,它将被丢弃。
  • 必须是这样的:{ "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": null
  • 但如果我将初始值设置为 null,则在具有数据 NEXT_OFFSET 的数组中将显示错误的值。如果在主数组中显示为 null 会更好
  • @NikitaAlekseev - 再次更新
猜你喜欢
  • 2021-05-18
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 2018-02-26
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多