javascript - 将数组显示为分页 View

标签 javascript angular

我正在尝试使用 ngFor 将对象数组显示为 Angular PPT View 页面。为此,我准备了一个临时对象,它运行良好,并且可以将其显示为页面。

临时对象:

let data = [
      {
        "page": "page1",
        "data": [
          {
            "id": "1",
            "content": "abc",
            "checked": true
          },
          {
            "id": "2",
            "content": "xyz",
            "checked": true
          }
        ]
      },
      {
        "page": "page2",
        "data": [
          {
            "id": "3",
            "content": "abc",
            "checked": true
          },
          {
            "id": "4",
            "content": "xyz",
            "checked": true
          }
        ]
      }
    ]

但是,使用我的原始数组,我无法转换为相同的格式

原始数组

[
  {
    "id": 1,
    "content": "abc"
  },
   {
    "id": 2,
    "content": "xyz"
  },
   {
    "id": 3,
    "content": "xyz"
  },
   {
    "id": 4,
    "content": "xyz"
  }
]

根据内容长度,我必须创建页码并使用 ngfor 在 html 中显示对象,例如如果object1object2长度超过1000,那么我必须只显示page1中长度小于1000的object1和page2中的object2,我尝试根据它进行转换关于内容长度,但我一直坚持这一点。

到目前为止我尝试过的:

this.templateArray.map((item) => {
      var a = item.content.length;
      this.totallength = this.totallength + a;
      if (this.totallength >= 500) {

        this.totallength = [];
      }
      dataobj = [{
        "page": pageNo,
        "data": [
          {
            "content": item.content
          }
        ]
      }];
      temp.push(dataobj);
    })

任何帮助都会很棒......

最佳答案

你可以尝试这样的事情:

<强> Working Demo

  constructor() {
    var newPageContentLength = 0;
    var pageNo = 1;
    var pageObj = {
      page: `page${pageNo}`,
      data: []
    };

    this.originalArray.forEach((item, i) => {
      newPageContentLength += item.content.length;
      if (i == 0) {
        pageObj.data.push({ ...item, checked: true });
      } else {
        if (newPageContentLength < 20) {
          pageObj.data.push({ ...item, checked: true });
        } else {
          this.viewArray.push({ ...pageObj });
          pageNo += 1;
          pageObj = {
            page: `page${pageNo}`,
            data: [{ ...item, checked: true }]
          };
          newPageContentLength = item.content.length;
        }
      }
      if (i == this.originalArray.length - 1) {
          this.viewArray.push({ ...pageObj });
      }
    });
  }

注意:这只是一个页面最大内容长度为20的示例。您可以根据需要修改/重构该功能

关于javascript - 将数组显示为分页 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554207/

相关文章:

angular - 标识符的定义与另一个文件中的定义冲突

node.js - ngrx 效果不触发 Action

javascript - 加载 Ripple 时,phonegap ondevice 未首次触发

javascript - 在指定元素的第一部分和最后一部分插入元素

javascript - 如何使用 forEach 删除列表中的元素?

Angular 2 : add hyphen after every 4 digit in input , 卡号输入

angular - 如何在Angular Material 7中自定义CSS拖拽,拖拽预览,拖拽占位符?

javascript - 使用 Selenium 和 java 测试 React JS 下拉列表

php - 我的 AJAX jQuery 函数有什么问题?

javascript - 如何使用 CdkScrollable 检测 Angular Material 2 自动完成列表上的滚动事件