2015-08-31 78 views
1

你好棧社會創造的x的單詞數的數組,從JavaScript字符串

我想acheive一個簡單的JavaScript函數首先從給定的字符串值計算單詞的總數。

在此之後,我不想將X個單詞存儲到一個數組中,以便能夠循環使用額外的html元素。

對於爲例,我有這個字符串:

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); 

事情變得複雜的地方是我建立陣列的地方。是的,我知道,我使用子字符串方法,這種方法實際上與字符一起工作。

我的問題很簡單。有沒有辦法用正則表達式函數來構建數組,還是我可以錯過很簡單的東西?

+0

可以提供的jsfiddle的值的數組? – Grundy

+0

這裏是jsfiddle:http://jsfiddle.net/gbb2ae4g/4/ –

回答

2

其實你已經在創建數組,但沒有保存它;)。

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

我會建議更換這行:

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

有了這兩個:

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

請讓我知道如果這能解決你的問題。

UPDATE

我的第一個建議reault在給你在每個chunks元素,這是不是你的情況的解決方案的任何一個字。

您發佈的原始代碼的問題是,構建數組的thie循環不考慮每個單詞的長度。

你可以建立這樣的陣列:

// 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,似乎按預期方式工作。請讓我知道這是否解決您的問題。

UPDATE II

在評論你還問我爲了OT頁面上顯示完整的句子,只要有可能達到每頁字限制之前檢測的最後一句話結束。這個jsFiddle更新爲以這種方式工作:http://jsfiddle.net/gbb2ae4g/17/。這個想法是以類似於先前版本的方式找到預期的頁面結尾,然後搜索以結尾的最後一個單詞並相應地調整頁面上的單詞數量。此代碼假定後面總是後跟空格字符,除非它是文本中的最後一個字符。

我也更新了以前的答案(第一個更新)給出的代碼,因爲它執行的頁面檢查結束不正確。

+0

其實,如果我使用你的答案,我得到保存我的塊數組,但它給我我的數組中的每個單詞一行。 在我的代碼中,我想要數組中的每行40個字。 –

+0

如果你去看[我的最新jsFiddle](http://jsfiddle.net/gbb2ae4g/5/),你會看到我確實保存了數組,但它每行只寫一個單詞。 –

+0

是的,你說得對,我還沒有正確理解你的問題。我更新了jsFiddle,按照你的意圖工作:http://jsfiddle.net/gbb2ae4g/9/。 –

0

如果我理解你的權利,你要的是削減的字數從字符串

如果是,那麼瞭解在MDN SPLIT METHOD分割方法。

正如可以看到有,分割方法有一個限制參數,於是下一個代碼將工作:

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

然後splits將包含bla,bla,bla