Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于字符限制的字符串数组,用于行为怪异的页面_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 基于字符限制的字符串数组,用于行为怪异的页面

Javascript 基于字符限制的字符串数组,用于行为怪异的页面,javascript,arrays,node.js,Javascript,Arrays,Node.js,我正在尝试将单个操作(字符串)数组转换为由多个页面操作组成的较少字符串数组。但我希望页面不要超过某个字符限制,但一旦接近尾声,它会占用太多的项目,并毫无理由地将它们推到末尾 代码就在这里 最终结果将13项分成5页,第1-4页提供2项,第5页提供5项。当它应该是7页,1-6页有2项,6页有1项。好吧,我需要它,而不是它应该,因为它显然不是。这里,这对你有用吗 const stringsToPages=(strings)=>{ //下面只是一个传递内容的显示-实际上不是在我的代码中。 var st

我正在尝试将单个操作(字符串)数组转换为由多个页面操作组成的较少字符串数组。但我希望页面不要超过某个字符限制,但一旦接近尾声,它会占用太多的项目,并毫无理由地将它们推到末尾

代码就在这里


最终结果将13项分成5页,第1-4页提供2项,第5页提供5项。当它应该是7页,1-6页有2项,6页有1项。好吧,我需要它,而不是它应该,因为它显然不是。

这里,这对你有用吗

const stringsToPages=(strings)=>{
//下面只是一个传递内容的显示-实际上不是在我的代码中。
var strings=[“1收到禁令”,“2收到禁令删除”,“3收到禁令”,“4收到禁令删除”,“5收到禁令”,“6收到禁令删除”,“7收到禁令”,“8收到禁令删除”,“9收到禁令”,“10收到禁令删除”,“11收到禁令”,“12收到禁令删除”,“13收到禁令”]
let pages=[''];//初始化要返回的pages数组
设currPage=0;
var limit=50;//字符限制
var clone=strings.slice(0);//克隆数组
clone.forEach(i=>{
设curPageLen=(pages[currPage]+i)。长度+2;
如果(curPageLen>=限制){
页面[++当前页面]='';
}
pages[currPage]=`${pages[currPage]}\n${i}`;
});
return pages;//下面是返回的内容-实际上不是在我的代码中。
}
让pages=stringsToPages();
控制台日志(页);

pages.forEach(p=>console.log(p.length))
一个猜测是,异步操作的结果包含更多的(字符串),因此出现了意外的输出…@eugensunic我刚刚删除了我这边的async/await,它没有改变任何内容。我想我一开始并不需要它,我想是的。这正是我所需要的,非常感谢。
module.exports = {
    stringsToPages: (strings) =>{
        // below is just a display of what is passed - not actually in my code.
        var strings = ["1 Received a ban","2 Had a ban removed","3 Received a ban","4 Had a ban removed","5 Received a ban","6 Had a ban removed","7 Received a ban","8 Had a ban removed","9 Received a ban","10 Had a ban removed","11 Received a ban","12 Had a ban removed","13 Received a ban"]

        let pages = []; // Initate pages array to return
        var limit = 50; // Character limit

        let it = 0; // Run iteration
        let tot = 0; // Total string length
        let setlen = 0; // Length of the set to cut into a new page.
        var clone = strings.slice(0); // Clone array

        strings.forEach(i => {
            it++;

            let len = tot+i.length+2; // Getting Size & adding two for "\n"
            if(len >= limit){ 
                pages.push(clone.splice(0,setlen).join(`\n`));
                tot = 0;
                setlen = 0;
            } else {
                tot = tot+i.length;
                setlen++;
            }

            // If on last iteration, check and see if the clone array has more items, if so join and push them.
            if(it === strings.length){
                if(clone.length > 0){
                    pages.push(clone.join(`\n`));
                }
            }   
        }); 


        return pages; // below is what is returned - not actually in my code.
        var result = ["1 Received a ban\n2 Had a ban removed","3 Received a ban\n4 Had a ban removed","5 Received a ban\n6 Had a ban removed","7 Received a ban\n8 Had a ban removed","9 Received a ban\n10 Had a ban removed\n11 Received a ban\n12 Had a ban removed\n13 Received a ban"]
    }
}