销毁默认值

问题描述 投票:0回答:1

我有一些标签为空的元素数组:

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'}}, 
];

我想按属性标签对该数组排序,并将null理解为”。所以我有这样的代码:

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

问题是elementAlabel有时似乎为空。错误是“无法读取null的属性'localeCompare'”。问题出在哪里?

sorting ecmascript-6 destructuring
1个回答
1
投票

解构中的默认值仅在值为undefined时适用。

如果需要为null使用默认值,请在运算符(short circuit evaluation)中使用||

如果表达式为真,则表达式(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);
© www.soinside.com 2019 - 2024. All rights reserved.