2015-09-30 4 views
4

У меня есть массив объектов React, и я хочу отсортировать их по значению одного из их реквизитов.ReactJS: Как отсортировать массив объектов на основе значений реквизитов?

var arr=[]; 
arr[0] = <Fruit name="orange" count={10}/> 
arr[1] = <Fruit name"apple" count={5}/> 

Есть ли встроенный в React функции, которые я могу использовать, чтобы отсортировать этот массив в порядке возрастания фруктов count?

ответ

6

React не имеет встроенной функции для обработки этого (что я знаю), но вы можете использовать что-то вроде lodash для достижения того, чего хотите. Я также предложил бы немного изменить структуру ваших данных. Взгляните на приведенный ниже пример.

// your data comes in like this 
var arr = [ 
    {name: "orange", count: 10}, 
    {name: "apple", count: 5}, 
    {name: "lemon", count: 11}, 
    {name: "grape", count: 2} 
]; 

// order by ascending 
var newArr = _.sortBy(arr, 'count', function(n) { 
    return Math.sin(n); 
}); 

// create your components 
var fruits = newArr.map(function(fruit) { 
    return(
     <Fruit name={fruit.name} count={fruit.count} /> 
    ); 
}); 

Here является скрипку, чтобы проиллюстрировать сортировочный ввод функции и вывод

+0

Спасибо @deowk. Fiddle отлично работает со строковыми значениями. Мы уже создаем массив из json. Просто интересно узнать, почему вы создали карту для этого. И есть проблема, что мы не используем lodash в нашем проекте. Можете ли вы предложить другое решение? – maxx777

+0

@ maxx777 Уверенный, что вам не нужно использовать lodash, то же самое можно было бы достичь с помощью чистой функции js с помощью функции sort(), так как для использования карты - я часто использую ее, потому что она оценивает по порядку вставки, тем самым обеспечивая порядок остается тем же ...;) – deowk

+0

Я отсортировал json перед созданием элементов React [этот вопрос] (http://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string -property-value-in-javascript? rq = 1) помог мне сортировать массивы JSON. Спасибо @deowk – maxx777

0

Если вы хотите сортировать в зависимости от нескольких полей: - // использование lodash

sortingFunction(arrayTobeSorted) { 
let sortedResults = sortBy(arrayTobeSorted, function(e) { 
return [e.field1.trim().toUpperCase(), e.field2.trim().toUpperCase()]; 
}); 
Смежные вопросы