Порядок загрузки по убыванию не работает в JavaScript (React Native) - PullRequest
1 голос
/ 27 марта 2019

Я получаю массив с сервера, как показано ниже.

[
  {
    id: '508',
    class: 'class1',
    value: '6.0',
    percentage: '8.90',
    color: 'black'
  },
  {
    id: '509',
    class: 'class2',
    value: '14,916',
    percentage: '2.40',
    color: 'black'
  },
  {
    id: '510',
    class: 'class3',
    value: '14,916',
    percentage: '56.40',
    color: 'black'
  },
  {
    id: '511',
    class: 'class',
    value: '4,916',
    percentage: '2.40',
    color: 'black'
  }
]

Из приведенного выше списка я должен показывать максимальные процентные значения для самых низких значений.

Итак, я попытался, как показано ниже.

if (jsonData) {
      const sortedArray = orderBy(
        jsonData,
        ['percentage'],
        ['desc']
      );
      console.log('sortedArray is ', sortedArray);

}

Снова в том же порядке, не упорядочиваясь от максимальных значений к наименьшим.

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 27 марта 2019

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

var data = [
  {
    id: '508',
    class: 'class1',
    value: '6.0',
    percentage: '8.90',
    color: 'black'
  },
  {
    id: '509',
    class: 'class2',
    value: '14,916',
    percentage: '2.40',
    color: 'black'
  },
  {
    id: '510',
    class: 'class3',
    value: '14,916',
    percentage: '56.40',
    color: 'black'
  },
  {
    id: '511',
    class: 'class',
    value: '4,916',
    percentage: '2.40',
    color: 'black'
  }
];

var correctedData = data.map( element => {
  // This will be a copy of every element, with the addition
  // of a new percentage value.
  // 
  var correctedElement = { 
    ...element,
    percentage: parseFloat(element.percentage)
  }
  return correctedElement;
});

var sortedArray = _.orderBy(correctedData, ['percentage'], ['desc']);

console.log(sortedArray)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
2 голосов
/ 27 марта 2019

Вы можете просто использовать sort функцию нативного JS

let arr = [{ id: '508',class: 'class1',value: '6.0',percentage: '8.90',color: 'black' },{ id: '509',class: 'class2',value: '14,916',percentage: '2.40',color: 'black' },{ id: '510',class: 'class3',value: '14,916',percentage: '56.40',color: 'black' },{ id: '511',class: 'class4',value: '4,916',percentage: '2.40',color: 'black' }]

let op = arr.sort(({percentage:A},{percentage:B})=>parseFloat(B) - parseFloat(A))

console.log(op)
...