在嵌套键上排序数组

Ton*_*niq 5 javascript arrays sorting

我正在使用此函数根据对象键对数组进行排序:

function keysrt(arr, key, reverse) {
    var sortOrder = 1;
    if(reverse){
        sortOrder = -1;
    }
    return arr.sort(function(a, b) {
        var x = a[key],
            y = b[key];

        return sortOrder * ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
}   
Run Code Online (Sandbox Code Playgroud)

它适用于这种类型的数组,其中键位于第一级:

var a = [ 
    { id: 0, last: 'Anne'},
    { id: 1, last: 'Odine'},
    { id: 2, last: 'Caroline'}
]

keysrt(a, 'last');
Run Code Online (Sandbox Code Playgroud)

如何使用此示例,其中title键是嵌套的

var b = [ 
    { id: 0, last: 'Anne',     data:{title: 'habc'}},
    { id: 1, last: 'Odine',    data:{title: 'asdf'}},
    { id: 2, last: 'Prentice', data:{title: 'tzuio'}}
]

keysrt(b, 'title');
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 8

对于这个想法,"key"变量变为一个键数组:然后指定要排序的嵌套值的"路径".

function keysrt(arr, keyArr, reverse) {
    var sortOrder = 1;
    if(reverse)sortOrder = -1;
    return arr.sort(function(a, b) {
        var x=a,y=b;
        for (var i=0; i < keyArr.length; i++) {
          x = x[keyArr[i]];
          y = y[keyArr[i]];
        }
        return sortOrder * ((x < y) ? -1 : ((x > y) ? 1 : 0));
    });
} 

keysrt(b,['data','title']);
Run Code Online (Sandbox Code Playgroud)