Уничтожение со значением по умолчанию - PullRequest
0 голосов
/ 17 января 2020

У меня есть массив элементов, некоторые из которых имеют нулевые метки:

let array= [ 
{category1:{id: 'aaa1', label:'bbb'}}, 
{category1:{id: 'aaa2', label:null}},
{category1:{id: 'aaa3', label:null}},
{category1:{id: 'aaa4', label:'ccc'}}, 
{category1:{id: 'aaa5', label:'ddd'}}, 
];

Я хочу отсортировать этот массив по метке свойства с пониманием нулей как ''. поэтому у меня есть такой код:

const sortingMethod = ({ category1: { label: elementALabel = '' } }, { category1: { label: elementBLabel = '' } }) => elementALabel.localeCompare(elementBLabel);
array.sort(sortingMethod );

Th проблема в том, что elementAlabel иногда кажется нулевым. Ошибка: «Не удается прочитать свойство» localeCompare «ноль». Где проблема?

1 Ответ

1 голос
/ 17 января 2020

Значения по умолчанию при деструктурировании применяются только тогда, когда значение равно undefined.

Если вам нужно использовать значение по умолчанию для null, используйте оценку короткого замыкания с оператором или (||).

Выражение (elementALabel || '') оценивается как значение elementALabel, если оно истинно, или как пустая строка, если значение равно falsy (null в данном случае).

const array = [{"category1":{"id":"aaa1","label":"bbb"}},{"category1":{"id":"aaa2","label":null}},{"category1":{"id":"aaa3","label":null}},{"category1":{"id":"aaa4","label":"ccc"}},{"category1":{"id":"aaa5","label":"ddd"}}];

const sortingMethod = ({ category1: { label: elementALabel } }, { category1: { label: elementBLabel } }) => (elementALabel || '').localeCompare(elementBLabel || '');
array.sort(sortingMethod)

console.log(array);
...