Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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_Node.js_Algorithm_Function - Fatal编程技术网

如何在javascript中将文本调整为一定长度

如何在javascript中将文本调整为一定长度,javascript,node.js,algorithm,function,Javascript,Node.js,Algorithm,Function,我正在开发一个Javascript函数,该函数将段落对齐为特定长度(函数对齐(str,len)。我已经更改了字符串,使每行的长度小于或等于len。现在的任务是填充足够的空格,以便一行与下一行对齐(双关语)但是我遇到了麻烦,我试着在一行中迭代,如果一个字符是一个空格,我会给它添加一个额外的空格,但这并没有真正起作用 考虑长度为30: 之前: ['Lorem ipsum dolor sit amet', 'consectetur adipiscing elit', 'sed do eiusmod t

我正在开发一个Javascript函数,该函数将段落对齐为特定长度(
函数对齐(str,len
)。我已经更改了字符串,使每行的长度小于或等于
len
。现在的任务是填充足够的空格,以便一行与下一行对齐(双关语)但是我遇到了麻烦,我试着在一行中迭代,如果一个字符是一个空格,我会给它添加一个额外的空格,但这并没有真正起作用

考虑长度为30:

之前:

['Lorem ipsum dolor sit amet',
'consectetur adipiscing elit',
'sed do eiusmod tempor',
'incididunt ut labore et dolore',
'magna aliqua. Ut enim ad minim',
'veniam, quis nostrud',
'exercitation ullamco laboris',
'nisi ut aliquip ex ea commodo',
'consequat. Duis aute irure',
'dolor in reprehenderit in',
'voluptate velit esse cillum',
'dolore eu fugiat nulla',
'pariatur. Excepteur sint',
'occaecat cupidatat non',
'proident, sunt in culpa qui',
'officia deserunt mollit anim']
之后:

Lorem  ipsum  dolor  sit amet,
consectetur  adipiscing  elit,
sed    do    eiusmod    tempor
incididunt ut labore et dolore
magna aliqua. Ut enim ad minim
veniam,      quis      nostrud
exercitation  ullamco  laboris
nisi  ut aliquip ex ea commodo
consequat.   Duis  aute  irure
dolor   in   reprehenderit  in
voluptate  velit  esse  cillum
dolore    eu    fugiat   nulla
pariatur.    Excepteur    sint
occaecat     cupidatat     non
proident,  sunt  in  culpa qui
officia  deserunt  mollit anim
当前状态:

function justify(str, len) {
    let tempArray = str.split(' ').filter(word => word.length);
    //removes any empty strings resulting from splitting via the spaces
    let lines = [];
    let justified = '';
    let line = [tempArray.shift()];

    for (let i = 0; i < tempArray.length; i++) {
        const word = tempArray[i];

        if ((line.join(' ') + ' ' + word).length <= len) {
            line.push(word);
        } else {
            lines.push(line.join(' '));
            line = [word];
        }
    }
    /*seperates the paragraph into lines with lengths less than or equal len 
    and stores them in lines*/


    for (let i = 0; i < lines.length; i++) {
        let line = lines[i].split('');
        let justifying = true;

        while (justifying) {
            for (let j = 0; j < line.length; j++) {
                if (line[j] === ' ') {
                    line[j] = line[j] + ' ';
                }

                if (line.length === 30) {
                    justifying = false;
                    break
                }

            }
        }

        justified += line.join('') + '\n';
    }
    //attempt to justify the paragraph

    return justified;
}
函数调整(str,len){
让tempArray=str.split(“”).filter(word=>word.length);
//删除通过空格拆分产生的任何空字符串
让线=[];
让我们为之辩护;
让line=[tempArray.shift()];
for(设i=0;iif((line.join('')+''+word).length您可以使用
padEnd

函数调整(str,len){
设temp=[];
temp=str.map((val)=>{
val=val.padEnd(len,“”);
返回值
})
返回温度;
}
让a=['Lorem ipsum door坐在一起',
“献祭精英”,
“sed do eiusmod tempor”,
“不包括劳工和福利”,
“大不平等,小不平等”,
“维尼安,我是诺斯特鲁德”,
“ullamco laboris实习”,
“nisi ut aliquip ex ea commodo”,
"因犯罪而死亡",,
“多洛在雷德亨德里特”,
"卷发",,
“dolore eu fugiat nulla”,
“圣帕里图尔除外”,
“occaecat cupidat non”,
“自以为是,罪有应得”,
“莫利特动画工作室”
]
让温度=合理(a,30);
控制台日志(临时);
  • 把每行分成几个字
  • 计算单词中的字符数
  • 计算您有多少空间(numSpacesYouHave=len-totalNumCharsInWords)
  • 每一个字
    • 计算填充量(padding=numSpacesYouHave/num剩余填充间隙)
    • 从numSpacesYouHave中减去填充
    • 填字
function justifyLine(行,len){
//将行拆分为单词
const words=line.split(+/);
//计算单词使用的字符数
const numChars=words.reduce((len,word)=>len+word.length,0);
让numspacestodistributed=len-numChars;
返回words.map((word,ndx)=>{
const numGaps=words.length-ndx-1;
常量填充=numSpacesToDistribute/numGaps | 0;
numSpacesToDistribute-=填充;
返回word.padEnd(word.length+padding);
}).加入(“”);
}
函数证明行(行,len){
返回line.map(line=>justifyLine(line,len));
}
常量行=[
“Lorem ipsum dolor sit amet”,
“献祭精英”,
“sed do eiusmod tempor”,
“不包括劳工和福利”,
“大不平等,小不平等”,
“维尼安,我是诺斯特鲁德”,
“ullamco laboris实习”,
“nisi ut aliquip ex ea commodo”,
"因犯罪而死亡",,
“多洛在雷德亨德里特”,
"卷发",,
“dolore eu fugiat nulla”,
“圣帕里图尔除外”,
“occaecat cupidat non”,
“自以为是,罪有应得”,
“mollit anim餐厅”,
];

console.log(证明行(行,30));
“有问题”没有说明您在何处陷入困境。请向我们展示您当前的代码尝试,并准确描述您陷入困境的位置。我们不是一家只为您从头开始编写代码的编码服务公司。通常,您应该尝试解决问题,当您陷入困境时,请向我们展示您的代码,并发布一个关于您的具体问题你被卡住了。这类事情只有在你以单间距字体显示文本时才会对其进行对正。是这样吗?还要注意,对正算法通常会选择在哪里断行,以使最坏情况下的额外空格最小化。是的,目标是对正单间距文本。你能解释原因吗,它会请帮助我更新我的答案。这不会产生OP给出的预期结果。间距不应位于行尾,而是分布的。OP是否希望通过在行后添加空格来平均对齐行?