喜欢再看一遍,养成习惯我的文档很多,还有教程资料。欢迎来到星和完美。面试时可参考考点复习。我希望我们能在一起。一般情况下,我们排序大多是按数字或字母顺序,但在某些情况下,我们可能需要自定义排序顺序。在此之前,先简单介绍一下reduce方法:语法:arr.reduce(callback(accumulator,currentValue[,index[,array]])[,initialValue])callback:执行数组中每个值的函数,包括四个参数:accumulator:累加器累加回调的返回值;它是上次调用回调时返回的累积值,或initialValue(见下文)。currentValue:正在处理的数组中的元素。currentIndex(可选):正在处理的数组中当前元素的索引。如果提供了initialValue,则起始索引号为0,否则为1。array(可选):在initialValue(可选)上调用reduce()的数组:为第一次。如果未提供初始值,将使用数组中的第一个元素。在没有初始值的空数组上调用reduce会抛出错误。Rudeuce流程说明:回调函数第一次执行时,accumulator和currentValue的值有两种情况:如果调用reduce()时提供了initialValue,则accumulator的值为initialValue,currentValue取第一个值在数组中;如果未提供initialValue,则accumulator取数组中的第一个值,currentValue取数组中的第二个值。回到原文:如下例所示,我们希望inProgress在前面,然后是todo,最后是done。consttasks=[{id:1,title:'JobA',status:'done'},{id:2,title:'JobB',status:'inProgress'},{id:3,title:'JobC',status:'todo'},{id:4,title:'JobD',status:'inProgress'},{id:5,title:'JobE',status:'todo'}]首先按照所需的排序顺序创建一个数组。constsortBy=['inProgress','todo','done']使用reduce创建函数,参数为数组,最终输出以数组项为键,索引为值,如{进行中:0,待办事项:1,完成:2}。constsortByObject=data=>data.reduce((obj,item,index)=>({...obj,[item]:index}),{})console.log(sortByObject(sortBy))/*{进行中:0,todo:1,done:2}*/所以我们有了排序设置,我们可以将它与传入数组(数据)、sortby数组和sortField的可重用函数放在一起,这样我们就知道哪个要排序的字段:constcustomSort=({data,sortBy,sortField})=>{constsortByObject=sortBy.reduce((obj,item,index)=>({...obj,[item]:index}),{})returndata.sort((a,b)=>sortByObject[a[sortField]]-sortByObject[b[sortField]])}console.log(customSort({data:tasks,sortBy,sortField:'状态'}))这样我们就可以按照我们自定义的顺序进行排序了,但是还是有一个问题,如果列表中有一个状态不同的item(不在我们的排序顺序中),就会出现问题。因此,为了处理这个问题,我们需要设置一个默认排序字段来捕获排序中不需要的所有项目。consttasksWithDefault=tasks.map(item=>({...item,sortStatus:sortBy.includes(item.status)?item.status:'other'}))这个时候更新的排序字段传过去了,那么你现在具有正确的排序顺序,并且列表底部包含状态为其他的项目。完整代码:consttasks=[{id:1,title:"JobA",status:"done"},{id:2,title:"JobB",status:"inProgress"},{id:3,title:"JobC",status:"todo"},{id:3,title:"JobD",status:"onHold"},{id:4,title:"JobE",status:"进行中"},{id:5,title:"JobF",status:"todo"}];constsortBy=[“进行中”,“待办事项”,“完成”];constcustomSort=({data,sortBy,sortField})=>{constsortByObject=sortBy.reduce((obj,item,index)=>({...obj,[item]:index}),{});returndata.sort((a,b)=>sortByObject[a[sortField]]-sortByObject[b[sortField]]);};consttasksWithDefault=任务。map(item=>({...item,sortStatus:sortBy.includes(item.status)?item.status:"other"}));console.log(customSort({data:tasksWithDefault,sortBy:[...sortBy,"other"],sortField:"sortStatus"}));运行结果:代码部署后可能存在无法实时获知的BUG。事后为了解决这些BUG,花了不少时间在日志调试上。顺便推荐一个好用的BUG监控工具Fundebug。原文:https://www.youtube.com/watch...每周更新交流文章。可以微信搜索“大千世界”立即阅读更新(比博客早一两篇),这篇文章GitHubhttps://github.com/qq449245884/xiaozhi已经收录,还有我的很多文档已经整理好了。欢迎明星和完美。可以参考考点面试。另外关注公众号,后台回复福利就可以看到福利了。你知道。
