2011-09-06 44 views
0

我有一個數組,其中有重複的值。我需要像元素一樣進行分組,並在值更改時創建一個新的「分區」。在Javascript中循環數組時檢測值何時更改?

我的數組是一樣的東西

{section: "An Hour before Dinner", title: "Cook peas"}, 
{section: "An Hour before Dinner", title: "Take pie out"}, 
{section: "As guests arrive", title: "Mix drinks"}, 
{section: "Just Before Dessert", title: "Reheat at 325 about 20 minutes."}, 
{section: "Just Before Dessert", title: "Cut and serve."}, 

我需要做的是這樣

An Hour Before Dinner 
    Cook peas 
    Take pie out 
As guests arrive 
    Mix Drinks 
Just before dessert 
    Reheat at 325 about 20 minutes. 
    Cut and serve. 

由於這樣的事實,有時我的數組可能有更少或更多的元素,我需要循環播放,當值改變時用新值創建一個新的標題,然後遍歷元素直到下一個不同的項目出現並創建下一個標題等。

+0

聽起來像是你可以使用backbone.js –

+0

@Steve:你的數組在語法上是不正確的(檢查[revision](http://stackoverflow.com/posts/73 21758 /修訂版)看看我改變了什麼)。我認爲在創建問題時這是一個錯字,而不是源代碼中存在的錯字。 – Matt

回答

1

這應該做的伎倆:

var arr = [ 
    {section:"An Hour before Dinner", title:"Cook peas"}, 
    {section:"An Hour before Dinner", title:"Take pie out"}, 
    {section:"As guests arrive", title:"Mix drinks"}, 
    {section:"Just Before Dessert", title:"Reheat at 325 about 20 minutes."}, 
    {section:"Just Before Dessert", title:"Cut and serve."} 
]; 
var s = null; 

var html = ""; 
for (var i = 0, l = arr.length; i<l; i++) { 
    var r = arr[i]; 
    if (r.section != s) { 
     // New section 
     s = r.section; 
     html += "<h1>"+s+"</h1>" 
    } else { 
     // Continue old section 
    } 
    html += "<p>"+r.title+"</p>"; 
} 

var div = document.createElement('div'); 
div.innerHTML = html; 
document.body.appendChild(div); 
2
var events = [/* as in the question */]; 
var groupedEvents = {}; 

for (var i = 0; i < events.length; ++i) { 
    var time = events[i].section; 
    var action = events[i].title; 

    if (!groupedEvents.hasOwnProperty(time)) { 
     groupedEvents[time] = []; 
    } 
    groupedEvents[time].push(action); 
} 

現在groupedEvents包含:

{ 
    "An Hour before Dinner": ["Cook peas", "Take pie out"], 
    "As guests arrive": ["Mix Drinks"], 
    "Just before dessert": ["Reheat at 325 about 20 minutes.", "Cut and serve."] 
} 
+0

謝謝。實際上,我的數組就是這樣的,因爲它實際上是來自Titanium JavaScript文件的對象數組。當然,你是正確的數組。 – Steve

0

假設他們是正確排序,並在一個陣列 「ARR」:

var pre = ''; 
for (var i = 0; i < arr.length; i++) { 
    if (arr[i].section != pre) displayHeading(arr[i]); 
    pre = arr[i]; 
    displayContent(arr[i]); 
} 
相關問題