2016-12-14 5 views
2

У меня есть приложение с угловым 2-х машинописным шрифтом, которое использует lodash для разных вещей.lodash orderby с нулевыми и действительными значениями, не правильно упорядоченными

У меня есть массив объектов, которые я приказываю используя свойство в объекте ...

_.orderBy(this.myArray, ['propertyName'], ['desc']); 

Это хорошо работает, однако моя проблема заключается в том, что иногда «ИмениСвойство» может иметь нулевое значение. Они упорядочены как первый элемент в нисходящем списке, затем следуют самые высокие реальные значения.

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

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

Кто-нибудь знает, как подойти к этому?

ответ

2

код мне нужен выглядит так ...

_.orderBy(this.myArray, [(o) => { return o.myProperty || ''}], ['desc']); 
7

В _.orderBy() итераторы используют метод вместо строки, проверьте значение, и если оно null возвращает пустую строку.

const myArray = [{ propertyName: 'cats' }, { propertyName: null }, { propertyName: 'dogs' }, { propertyName: 'rats' }, { propertyName: null }]; 
 

 
const result = _.orderBy(myArray, ({ propertyName }) => propertyName || '', ['desc']); 
 

 
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

Проверка может быть простым, как тот, который я использовал, который преобразует все falsy значения в пустую строку:

propertyName || '' 

Если вам нужен более строгий контроль , вы можете использовать trinary и handle только null значения:

propertyName === null ? '' : propertyName 
+0

Очень близко, спасибо. Я опубликовал полное решение ниже. –

+1

Зачем вам нужен дополнительный материал '[(o) => {return o.myProperty || ''}] '? Мое решение работает из коробки. См. Фрагмент. Просто замените свойство propertyName на имя свойства. –

+0

Кажется, это не работало для меня так, как у вас было, но так оно и было. Может быть, это что-то вроде lodash или что-то в этом роде. В любом случае проблема решена сейчас. Спасибо за вашу помощь. –

0

мина выглядит следующим образом. Имя_свойства и сортировки являются переменными в моем решении

return _.orderBy(myarray, [ 
    (data) => { 
    if (data[propName] === null) { 
     data[propName] = ""; 
    } 
    return data[propName].toLowerCase(); 
    } 
], [sort]); 

Я хотел tolowercase, потому что в противном случае сортировки не является правильным, если различные оболочки

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

  • Нет связанных вопросов^_^