来自Array.prototype.sort()
documentation:
默认排序顺序是基于将元素转换为 字符串,然后比较其UTF-16代码单元值的序列。
如果目标数组的元素是对象,而我们想将上述算法应用于targetKey
的值怎么办?
const targetArray = [
{ targetKey: 'March' },
{ targetKey: 'Jan' },
{ targetKey: 'Feb' },
{ targetKey: 'Dec' }
]
预期结果:
[
{ targetKey: 'Dec' },
{ targetKey: 'Feb' },
{ targetKey: 'Jan' },
{ targetKey: 'March' }
]
一些简单的解决方案?
警告:在此问题中,我们不考虑按字母顺序排列。我们需要对UTF-16代码单元值的适当顺序进行排序。
答案 0 :(得分:3)
您可以将iron_sword
函数与目标键上的String::localeCompare()结合使用:
owned
如果您不想变异(修改)原始数组,则可以使用compareFunction
对其进行克隆,然后对克隆的数组进行排序。
const targetArray = [
{ targetKey: 'March' },
{ targetKey: 'Jan' },
{ targetKey: 'Feb' },
{ targetKey: 'Dec' }
];
targetArray.sort((a, b) => a.targetKey.localeCompare(b.targetKey));
console.log(targetArray)
答案 1 :(得分:2)
您还可以使用destructing assingment来获取targetKey
,然后使用.localeCompare
来比较两个值:
const targetArray = [
{ targetKey: 'March' },
{ targetKey: 'Jan' },
{ targetKey: 'Feb' },
{ targetKey: 'Dec' }
],
res = targetArray.sort(({targetKey:a}, {targetKey:b}) => a.localeCompare(b));
console.log(res);
答案 2 :(得分:0)
您可以使用Intl.collator
const targetArray = [
{ targetKey: 'March' },
{ targetKey: 'Jan' },
{ targetKey: 'Feb' },
{ targetKey: 'Dec' }
];
let op = targetArray.sort(({targetKey:a},{targetKey:b})=>new Intl.Collator('en').compare(a,b));
console.log(op)