如何解决如何在排序比较函数中获取数组元素的索引?
我正在看这个问题:
数组的 sort
方法可以接受一个参数,它是一个
具有两个参数的比较函数——比如 x 和 y。功能
如果 x 应该在 y 之前返回一个负整数,如果 x 和 y 返回零
是不可区分的,如果 x 应该在后面,则为正整数
是的编写调用,使用箭头函数,排序:
- 按降序排列的正整数数组
- 按年龄增长的一组人
- 增加长度的字符串数组
这是我的代码:
const posIntByDcrOrd = [5,4,3,2,1]
const peopleIncAge = [10,15,20,25,30]
const strIncLength = ['a','ab','abc','abcd']
const compFunc = (x,y) => {
let sumNeg = y - x
let sumPos = y + x
if(indexOf(x) < indexOf(y)) { console.log(sumNeg) }
else if( indexOf(x) > indexOf(y)) { console.log(sumPos) }
else { return 0 }
}
posIntByDcrOrd.sort(compFunc(5,4))
这段代码背后的想法是:如果你能对数组的 x 和 y 元素的索引求和,你可以得到一个负整数,因为 x 将低于 y 并且 y 将高于 x,这满足条件。但是当我尝试运行它时,我当然得到了一个参考错误。如何访问排序数组中 x 和 y 的索引位置?我也愿意接受其他解决方案。
P.S.:这些数组是为了简化思考过程而组成的。
解决方法
本网站上有大量关于排序的问答。您的尝试似乎表明您没有看到数字在 JavaScript 中通常是如何排序的。例如,this Q&A 和许多其他人提供了正确的方法。
对您的尝试的一些评论:
-
在
indexOf
的回调中没有可用的sort
。你不需要这些信息。只需从第一个值中减去第二个值即可获得升序(非降序)结果。在另一种意义上执行减法以获得降序(非递增)结果。sort
函数的内部将使用该返回值来执行排序算法。在此过程中,您不需要知道任何索引。 -
关于人员的分配可能没有正确反映在您的样本数组中,因为现在它看起来与第一个输入(数字数组)相同。很可能是一组对象。例如:
const peopleIncAge = [{name: "Helen",age: 20},{name: "John",age: 15},{name: "Anne",age: 30},{name: "Clark",age: 25},{name: "Joy",age: 10}]
-
您的输入数组已经排序,因为它们需要输出。为了测试任何解决方案,最好将它们洗牌。
三个练习中的每一个都需要为 sort
函数提供不同的回调函数:
const positives = [1,3,5,4,2];
const people = [{name: "Helen",age: 10}];
const strings = ['abc','a','abcd','ab'];
console.log(positives.sort((x,y) => y - x)); // decreasing
console.log(people.sort((x,y) => x.age - y.age)); // increasing age
console.log(strings.sort((x,y) => x.length - y.length)); // increasing length
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。