我有一个重复值的数组。我需要对相似的元素进行分组,当值更改时会创建一个新的“部分”。
我的数组就像
{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 :(得分: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]);
}