在Javascript中循环数组时检测值何时发生变化?

时间:2011-09-06 14:44:49

标签: javascript loops

我有一个重复值的数组。我需要对相似的元素进行分组,当值更改时会创建一个新的“部分”。

我的数组就像

{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.

由于有时我的数组可能有更少或更多的元素,我需要循环它,当值更改时创建一个带有新值的新标题,然后遍历元素直到下一个不同的项目出现并创建下一个标题等。

3 个答案:

答案 0 :(得分: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."]
}

答案 1 :(得分: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 :(得分: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]);
}