繁体   English   中英

如何在排序比较 function 中获取数组元素的索引?

[英]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。 编写调用,使用箭头函数,排序:

  1. 按降序排列的正整数数组
  2. 随着年龄的增长,一群人
  3. 增加长度的字符串数组

这是我的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM