0

如何在javascript中对多维数组进行排序

        how to sort this multi dimensional array in javascript

            var arr = [];
            arr[0]  = [{id:1}, {id:5}, {id:7}];
            arr[1] =  [{id:3}, {id:8}, {id:6}];
            arr[2] = [{id:2}, {id:4}, {id:9}];


            The output should be like this
            arr[0]  = [{id:1}, {id:2}, {id:3}];
            arr[1] =  [{id:4}, {id:5}, {id:6}];
            arr[2] = [{id:7}, {id:8}, {id:9}];
4

3 回答 3

2

您将需要一些辅助功能:

Array.prototype.flattened = function() {
    return Array.prototype.concat.apply([], this);
};
Array.prototype.splitBy = function(n) {
    var r = [];
    for (var i=0; i<this.length; i+=n)
        r.push(this.slice(i, i+n));
    return r;
};
Array.prototype.sortBy = function sortBy(key) {  
if (this[0] && this[0][key] == "number")
        return this.sort(function(a,b) {return a[key] - b[key];});
    return this.sort(function(a, b) {
        return a[key]<b[key] ? -1 : a[key]>b[key] ? 1 : 0;
    });
};

然后,很容易:

arr.flattened().sortBy("id").splitBy(3);

在 jsfiddle.net 上的演示

于 2012-10-10T09:27:34.640 回答
1

我能想到的最简单的解决方案是

var sortChunks = function(ar, property,chunkSize)
{
    //set default params:
    chunkSize = chunkSize || ar[0].length;// || 3?;
    property = property || 'id';
    var i=0,j=0,all = [],ret = [];
    for(i=0;i<ar.length;i++)
    {//"map" objects, use property as array index
        for(j=0;j<ar[i].length;j++)
        {
            all[ar[i][j][property]] = ar[i][j];
        }
    }
    all.sort(function(a,b)
    {//move all undefined keys to the end of the array
        if (a === undefined)
            return 1;
        if (b === undefined || b.id > a.id)
            return -1;
        else
            return 1;
    });
    while(all && all[0] !== undefined)
    {//make chunks
       ret.push(all.splice(0,chunkSize));
    }
    return ret;
};
//usage:
arr = sortChunks(arr);//returns desired array
//or
arr = sortChunks(arr,'id',3);

话虽如此,您可能最好重新考虑构建此数组的方式并更改该代码,而不是依赖于这个相当丰富(并且在其当前形式中相当容易出错)的排序函数。

同时,检查这个小提琴以查看它的运行情况......有点

于 2012-10-10T09:14:49.917 回答
0

您可以创建具有 n * m 个元素的“一维”数组。其中 n 和 m 是行数和列数。然后使用其中一种排序算法。

http://en.wikipedia.org/wiki/Sorting_algorithm

于 2012-10-10T08:09:53.977 回答