2015-02-23 4 views
1

Этот вопрос близко к этому один: Sort array of objects by string property value in JavaScriptСортировка объектов в массиве по значению поля в качестве параметра

Тем не менее, значение поля должно быть выбрано пользователем (сохраненного в параметре sortBy):

function sortList (sortBy, list) { 
    return list.sort(function (val1, val2) { 
    if (val1.sortBy > val2.sortBy) { 

    return -1; 
    } 
    if (val1.sortBy < val2.sortBy) { 
    return 1; 
    } 

    return 0; 

    }); 
} 

var myObj = [ 
    {a: 1, b: 3}, 
    {a: 3, b: 2}, 
    {a: 2, b: 40}, 
    {a: 4, b: 12} 
]; 

sortList(myObj.a, myObj); 

Объект не изменяется.

+0

Второй ответ на связанный вопрос показывает, как это сделать: http://stackoverflow.com/a/4760279/218196 –

ответ

4

Вы близки:

function sortList (sortBy, list) { 
    return list.sort(function (val1, val2) { 
    if (val1[sortBy] > val2[sortBy]) { 

    return -1; 
    } 
    if (val1[sortBy] < val2[sortBy]) { 
    return 1; 
    } 

    return 0; 

    }); 
} 

var myObj = [ 
    {a: 1, b: 3}, 
    {a: 3, b: 2}, 
    {a: 2, b: 40}, 
    {a: 4, b: 12} 
]; 

sortList("a", myObj); 

Если вы хотите получить доступ к свойствам некоторым вычисленного значения, используйте оператор [ ] вместо .. Как бы то ни было, ваш код всегда искал свойство «sortBy», а параметр pass-in игнорировался.

+0

Спасибо за объяснение. Теперь это работает :) –

Смежные вопросы