[英]How to get an index of an array element within a sort comparison function?
我正在看这个问题:
arrays 的
sort
方法可以接受一个参数,该参数是 function 与两个参数(例如 x 和 y)的比较。 如果 x 应该在 y 之前,则 function 返回负 integer,如果 x 和 y 无法区分,则返回零,如果 x 应该在 x 之后,则返回正 integer。 编写调用,使用箭头函数,排序:
- 按降序排列的正整数数组
- 随着年龄的增长,一群人
- 增加长度的字符串数组
这是我的代码:
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))
这段代码背后的想法是:如果你可以将 arrays 的 x 和 y 元素的索引相加,你可以得到一个负的 integer,因为 x 将低于 y 并且 y 将高于 x,这满足条件。 但是当我尝试运行它时,我当然得到了一个参考错误。 如何访问已排序数组中 x 和 y 的索引位置? 我也对其他解决方案持开放态度。
PS:这些 arrays 是为了缓解思维过程而编造的。
这个网站上有大量关于排序的问答。 您的尝试似乎表明您没有看到 JavaScript 中的数字通常是如何排序的。 例如这个问答和许多其他的,提供了正确的方法来做到这一点。
对您的尝试的一些评论:
在sort
的回调中没有indexOf
可供您使用。 你不需要这些信息。 只需从第一个值中减去第二个值即可获得递增(非递减)结果。 在另一个意义上执行减法以获得下降(非增加)的结果。 sort
function 的内部将使用该返回值来执行排序算法。 在该过程中,您不需要知道任何索引。
关于人员的分配可能没有正确反映在您的示例数组中,因为现在它看起来与第一个输入(数字数组)相同。 很可能是一组对象。 例如:
const peopleIncAge = [{name: "Helen", age: 20}, {name: "John", age: 15}, {name: "Anne", age: 30}, {name: "Clark", age: 25}, {name: "Joy", age: 10}]
您的输入 arrays 已经排序,因为它们需要是 output。 为了测试任何解决方案,最好将它们洗牌。
三个练习中的每一个都需要一个不同的回调 function 用于sort
function:
const positives = [1, 3, 5, 4, 2]; const people = [{name: "Helen", age: 20}, {name: "John", age: 15}, {name: "Anne", age: 30}, {name: "Clark", age: 25}, {name: "Joy", 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.