用Google搜索了一下,但无法解决如何处理这个问题。
我有/计划一个项目列表。
var list1 = [
[141,'AAA', 'A Group'],
[262,'BBB', 'B Group'],
[345,'CCC', 'B Group'],
[136,'DDD'],
[095,'EEE', 'A Group'],
[175,'FFF'], and so on...
];
我的目标是打印这些物品。 首先按字母顺序排列。此后无组织。
所有项目均按字母顺序排列。
最终结果如下:
<div>
<h2>A Group</h2>
<ul class="group">
<li>
<img src="/141">
<h3>AAA</h3>
</li>
<li>
<img src="/095">
<h3>EEE</h3>
</li>
</ul>
<h2>B Group</h2>
<ul class="group">
<li>
<img src="/262">
<h3>BBB</h3>
</li>
<li>
<img src="/345">
<h3>CCC</h3>
</li>
</ul>
<h2>No group</h2>
<ul class="non-group">
<li>
<img src="/136">
<h3>DDD</h3>
</li>
<li>
<img src="/175">
<h3>FFF</h3>
</li>
</ul>
</div>
有关如何解决这个问题的想法吗?
找到了这个,https://stackoverflow.com/a/7596924/543365
非常接近我可以使用的东西。但是无法将它弯曲到我的使用状态。
答案 0 :(得分:2)
我建议调查 underscorejs ,但是,如果你想使用纯javascript:
1。)对列表进行排序,使具有组的项目排在第一位。
var i = 0,
group_arr = [];
for (i = 0; i < list1.length; i++) {
if (list1[i][2] !== undefined) {
group_arr.append(list1.splice(i, 1)[0]);
}
}
2。)现在,所有带有群组的项目都在group_arr
,而没有群组的项目在list1
。我们现在需要对group_arr
进行排序,使其按组的字母顺序排列:
group_arr.sort(function (item1, item2) {
return (item1[2] > item2[2]) ? 1 : -1;
});
请注意,我们可以根据任意条件对group_arr
进行排序。如果您想按第二个条目按字母顺序排序,只需将比较器函数中的索引转换为Array.prototype.sort
。
3。)现在group_arr
中的项目按组的字母顺序排列,并包含具有组的项目。 list 1
中的项目没有组,也没有排序。您现在可以遍历每个数组,创建DOM元素,然后插入它们。
答案 1 :(得分:0)
Vinay的回答很棒。这样的事情也应该有效:
var list1 = [
[141,'AAA', 'A Group'],
[262,'BBB', 'B Group'],
[345,'CCC', 'B Group'],
[136,'DDD'],
[095,'EEE', 'A Group'],
[175,'FFF']
];
var list1_new = list1.sort(function(a, b){
if (a[2] == b[2]) {
return 0; // Do nothing
}
if (a[2] > b[2]) {
return 1; // Put a AFTER b
}
if (a[2] < b[2]) {
return -1; // Put a BEFORE b
}
});
console.log(list1_new);
在检查索引sort()
(组)后,您可以重新运行2
函数来处理其他值,以便在一个和另一个之后对它们进行排序。
答案 2 :(得分:0)
我同意,Vinay的答案很好,我也建议使用下划线并让你成为fiddle。
var groups = _.filter(list1,function(entry){
return entry.length == 3;
});
var groupsSorted = _.sortBy(groups,function(entry){
return entry[2] + entry[1]; //sort by group name and second element
});