3

谷歌搜索了一下,但无法解决如何处理这个问题。

我有/计划了一份物品清单。

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

相当接近我可以使用的东西。虽然无法将它弯曲以供我使用。

4

3 回答 3

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 元素,然后插入它们。

于 2013-03-19T09:23:03.120 回答
0

维奈的回答很棒。像这样的东西也应该起作用:

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,以便一个又一个地对它们进行排序。

祝你好运!

于 2013-03-19T09:28:22.333 回答
0

我同意,Vinay 的回答很好,我也会建议下划线并让你成为小提琴

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
});
于 2013-03-19T09:31:05.767 回答