应该这样做。我添加了 cmets 以显示发生了什么...
var something = {
dataset: [],
};
something.dataset.unshift({data : [1,5,4,6]});
something.dataset.unshift({data : [1,5,8,6]});
something.dataset.unshift({data : [2,4,7,4]});
something.dataset.unshift({data : [12,53,4,45]});
something.dataset.unshift({data : [11,52,41,16]});
something.dataset.unshift({data : [1,53,43,64]});
something.dataset.unshift({data : [1,5,8,6,3]});
//This function is used when sorting two cells in an array
//See the Array.prototype.sort method on MDN for more info
//Returning -1 keeps (a,b)->(a,b), returning 1 swaps (a,b)->(b,a)
var asc = function(a,b) {return a<b?-1:1; };
//Sort the whole dataset, based on the values of each array
something.dataset.sort(function(a,b) {
//The arguments a and b are cell objects in something.dataset
//Sort each of the data arrays for the objects
a.data.sort(asc);
b.data.sort(asc);
//Tricky part is if a.data[0] and b.data[0] are equal
//Find the first cell of both arrays that are not equal
var i=0;
var al = a.data.length;
var bl = b.data.length
var l=Math.min(al,bl);
while(i<l && a.data[i]===b.data[i]) i++;
//All the values for the shortest of both arrays are equal! Sort by the length of the arrays instead
if(i>=l) return asc(al,bl);
//We found a non-equal cell in both arrays, sort by it!
return asc(a.data[i],b.data[i]);
});
console.log(JSON.stringify(something));