分页符角度

分页符角度

我尝试使用对象数组创建页面,到目前为止,我可以使用以下代码来破坏页面。 我的数组会像这样

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

通过下面的代码创建页面

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

        this.contentArray.map(function (item) {
          if (item.checked) {
            temp.push(item);
          }
        })

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

        });

      }

Stackblitz的链接:https://stackblitz.com/edit/angular-jelfzk?file=src/app/app.component.html

页面限制为每页5000个字符 从上面的代码中,如果3个对象分别具有3000和1000和3000个字符,则第一个和第二个对象将完全转到第二个页面,而第三个3000个字符的对象将完全转到第二个页面。 第三个对象1000个字符必须转到第1页,其他2000个字符必须转到第二页。这没有发生,任何人都可以在这个问题上帮助我

lijing_966 回答:分页符角度

您忘记为第三个对象的拆分编码。

我不确定您是否了解您,我从您的示例中了解到您想要执行以下操作:

[
    {
      id: 1,content: "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"
    },{
      id: 2,content: "xyz"
    },{
      id: 3,{
      id: 8,{
      id: 9,{
      id: 10,content: "abcabcabcabcabcabcabcabcabcabcabcabcabcabcabc"
    }
  ];

成为类似20个角色的页面:

[
  {
    "page": "page1","data": [
      {
        "id": 1,"content": "abcabcabcabcabcabcab","checked": true
      }
    ]
  },{
    "page": "page2","content": "cabcabcabcabcabcabca",{
    "page": "page3","content": "bcabc","checked": true
      },{
        "id": 2,"content": "xyz",{
        "id": 3,{
        "id": 8,{
        "id": 9,{
        "id": 10,"content": "abc",{
    "page": "page4","data": [
      {
        "id": 10,{
    "page": "page5",{
    "page": "page6","content": "bc","checked": true
      }
    ]
  }
]

我使用了递归函数来获得乐趣:)在您的stackBlitz示例中尝试一下。

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

    this.originalArray.forEach((item,i) => {
        [pageObj,newPageContentLength,pageNo] = this.cutInPages(item,pageObj,pageNo);
      if (i == this.originalArray.length - 1) {
        this.viewArray.push({ ...pageObj });
      }
    });
  }

  private cutInPages(item,pageNo) {
      let numberNeededToCompleteCurrentPage = this.NB_BY_PAGE - newPageContentLength;
        if (item.content.length <= numberNeededToCompleteCurrentPage) {
          pageObj.data.push({ ...item,checked: true });
          newPageContentLength += item.content.length;
          return [pageObj,pageNo]
        } else {
          let firstPartItem = {id:item.id,content: item.content.substr(0,numberNeededToCompleteCurrentPage),checked: true};
          pageObj.data.push({ ...firstPartItem,checked: true });
          this.viewArray.push({ ...pageObj });
          pageNo += 1;
          pageObj = {
            page: `page${pageNo}`,data: []
          };
          newPageContentLength = 0
          let secundPartItem = {id:item.id,content: item.content.substr(numberNeededToCompleteCurrentPage,item.content.length),checked: true};
              return this.cutInPages(secundPartItem,pageNo);
        }
  }
本文链接:https://www.f2er.com/3159444.html

大家都在问