为了账号安全,请及时绑定邮箱和手机立即绑定

Typescript 中的比较器,用于对数组进行自定义排序

Typescript 中的比较器,用于对数组进行自定义排序

MMMHUHU 2021-11-12 17:46:37
所以我想对一个数组使用自定义排序,我得到的数组总是以不同的顺序: [{code: 'A'},{code: 'O'},{code: 'I'}],  [{code: 'O'},{code: 'A'},{code: 'I'}], ...我要按 [{code: 'A'},{code: 'O'},{code: 'I'}]顺序。export function someSort(arrayToSort): Array {  if (!arrayToSort || arrayToSort.length < 1) {    return [];  }  const sorted = new Map();  const sorting = ['A', 'O', 'I'];  for (let i = 0; i < sorting.length; ++i) {    sorted.set(sorting[i], i);  }  return arrayToSort.sort((a, b) => sorted.get(a.code) - sorted.get(b.code));}我尝试了这个,我将我想要的排序添加到地图中,键是“A”,值是一个数字,所以它是可排序的,但我收到一个错误core.js:15724 ERROR TypeError: Cannot assign to read only property '0' of object '[object Array]',现在我没有想法了。
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

你走得太远了。


仅使用数组进行排序就足够了,依靠其中项目的索引。


const data = [

  { code: 'O' },

  { code: 'A' },

  { code: 'I' },

];


const order = ['A', 'O', 'I'];


const sorted = data.sort((a, b) => order.indexOf(a.code) - order.indexOf(b.code));


console.log(sorted);


查看完整回答
反对 回复 2021-11-12
?
HUH函数

TA贡献1836条经验 获得超4个赞

该数组来自 redux 存储并且它是不可变的,所以我slice()在调用之前解决了它sort()


查看完整回答
反对 回复 2021-11-12
?
万千封印

TA贡献1891条经验 获得超3个赞

您的代码不会为我引发运行时错误,但会引发构建错误 re: 类型声明。AnArray需要一个类型,即使它是any. 将您的函数声明更改为

export function someSort(arrayToSort): Array<any> {

为我修复了它(如:构建、运行并产生预期结果)。


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 328 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信