2

私はこのjsonを持っています:

var projects_array = [
{name:"proj1", category:"a", index:1},

{name:"proj2", category:"a", index:2},

{name:"proj3", category:"b", index:3},  

{name:"proj4", category:"c", index:4}
];

私はこれらを次のような順序で表示しています:

for (var i = 0 ; i <proj_num; i++){ 
var numClass="p_"+projects_array[i].index;  
    var act="<li class='"+numClass+"'></li>";           
$('#lookfor').append(act);             
}

ここで必要なのは、最初にcategory属性に値 "a"を持つすべてのオブジェクトを表示し、次に他のすべてのオブジェクトを任意の順序で表示することです。このように.sort()を使用してみました:\

 function compare(obj){
if(obj.category == "a"){ return 1;}                 
    else{return 0;}                     
}                       
obj.sort(compare);

しかし、カテゴリのすべてのオブジェクトをグループ化するため、機能しません...

この問題の可能な解決策はありますか?

ps:コードをわかりやすくするために簡略化しようとしました。事前に感謝します。

4

1 に答える 1

0

これは、最初に重要な単語に従ってソートされます。

http://jsbin.com/umezet/12/edit

     var projects_array = [
{
    name: "proj1",
    category: "action",
    index: 1
}, {
    name: "proj2",
    category: "time",
    index: 2
}, {
    name: "proj3",
    category: "buu",
    index: 3
}, {
    name: "proj3",
    category: "time",
    index: 3
}, {
    name: "proj4",
    category: "cooo",
    index: 4
}, {
    name: "proj3",
    category: "@",
    index: 3
}, {
    name: "proj1",
    category: "!",
    index: 1
}, {
    name: "proj2",
    category: "%",
    index: 2
}, {
    name: "proj3",
    category: "cooo",
    index: 3
}, {
    name: "proj4",
    category: "*",
    index: 4
}];
projects_array = projects_array.sort(

function (x, y)
{
    if(x['category'] == 'time') return -1;
    if(y['category'] == 'time') return 1;
    if(x['category'] > y['category']) return 1;
    if(x['category'] < y['category']) return -1;
    return 0;
});
for(var i = 0; i < projects_array.length; i++)
{
    $('body').append(projects_array[i]['category']);
}
于 2012-05-10T07:52:10.107 に答える