簡體   English   中英

從javascript字符串創建X個單詞數的數組

[英]Create an array of X number of words from javascript String

您好Stack社區,

我正在嘗試實現一個簡單的javascript函數,以首先從給定的字符串值計算單詞的總數。

在此之后,我將不將X個單詞存儲到數組中,以便能夠與周圍的其他html元素一起循環。

例如,我有這個String:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis feugiat sollicitudin lacus, nec pulvinar quam scelerisque at. Phasellus ut tellus scelerisque, fringilla ligula a, commodo odio. Aenean mattis eros sed purus iaculis, at pellentesque ligula luctus. Pellentesque luctus augue ut quam consequat rhoncus. In at dolor sed ipsum ullamcorper fermentum. Pellentesque porta convallis nisl vitae cursus. Maecenas luctus libero sit amet efficitur consequat. Suspendisse nec luctus dolor. Fusce sit amet scelerisque erat. Aenean ac tristique nisl. Etiam in est purus. In magna nunc, viverra nec ante quis, aliquam venenatis sem.

這是我實際上正在處理的代碼。 (我只是參加了必填部分)。

// Var for Word max
    var wordsMaxFirstPage = 40;
    var wordsMaxOthersPages = 50;

    // Default field (My String example)
    var defaultField = $(this).find('.c_6937 .textarea .value');

    // Count the number of words for this form
    var countLengthOfCommentPage = defaultField.text().split(' ').length;

    // Creat Array of the comment splits by Maximum words per page
    var chunks = [];
    for (var i = 0, charsLength = countLengthOfCommentPage; i < charsLength; i += wordsMaxFirstPage) {
        chunks.push(defaultField.html().substring(i, i + wordsMaxOthersPages));
    }


    // Execute Array to build the new HTML
    for (var key in chunks) {
        if (chunks.hasOwnProperty(key)) {

            $(this).find('.c_6937').append('<div class="value line_'+key+'" style="font-size: 20px; margin: 0px; line-height: 26px; font-family: Times, serif; font-weight: normal;">' + chunks[key] + '</div>');

            console.log(key + " -> " + chunks[key]);
        }
    }


    // Debug
    console.log(countLengthOfCommentPage);

對我來說,事情變得復雜起來的地方就是我構建數組的地方。 是的,我知道,我使用子字符串方法,該方法實際上適用於角色。

我的問題很簡單。 有什么方法可以使用正則表達式函數構建數組,還是我只是想丟失一些非常簡單的東西?

實際上,您已經在創建數組,但尚未保存;)。

Javascript中的split()函數拆分給定的字符串,並創建一個包含結果片段的數組。

我建議替換此行:

var countLengthOfCommentPage = defaultField.text().split(' ').length;

有了這兩個:

var chunks = defaultField.text().split(' ');
var countLengthOfCommentPage = chunks.length;

如果這解決了您的問題,請告訴我。

UPDATE

我的第一個建議是在每個chunks元素中給您一個單詞,這是re屈的,這不是您的解決方案。

您發布的原始代碼的問題在於,構建數組的循環並沒有考慮每個單詞的長度。

您可以像這樣構建數組:

// split the text into separate words
var words = defaultField.text().split(' ');

//read total number of words
var totalWordsCount = words.length;
//maximum number of words per page allowed, set to 10 as example
var wordsCountPerPage = 10;
var chunks = [];

// in each iteration "i" points to the first word in the new page, so it's 0, 11, 21 etc.
for (var i = 0; i < totalWordsCount; i+=wordsCountPerPage) {
    //'slice()' function gets words for the current line, then they're concatenated with 'join()'
    //'Math.min()' function is used to make sure that appropriate number of words are taken for the last page
    chunks.push(words.slice(i, Math.min(i+wordsCountPerPage, totalWordsCount)).join(' '));
}

我已經更新了jsFiddle,它似乎按預期工作。 如果這解決了您的問題,請告訴我。

更新二

在注釋中,您還要求在達到每頁字數限制之前檢測最后一個句子的結尾,以便盡可能在頁面上顯示完整句子。 此jsFiddle已更新為以這種方式工作: http : //jsfiddle.net/gbb2ae4g/17/ 這個想法是用與先前版本相似的方式找到預期的頁面結尾,然后搜索以結尾的最后一個單詞,並相應地調整頁面上的單詞數。 這段代碼假定點號后面總是空格字符,除非它是文本中的最后一個字符。

我還更新了作為前一個答案給出的代碼(第一次更新),因為它錯誤地執行了頁尾檢查。

如果我理解正確,那么您想要的是減少字符串中的單詞數

如果是這樣,請閱讀MDN SPLIT METHOD中的split 方法

如您所見,split方法具有一個limit參數,因此下一個代碼將起作用:

var x = "bla bla bla bla bla";
var splits = x.split(" ",3);

然后splits將是一個包含值bla,bla,bla的數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM