javascript - 如何在排序比较函数中获取数组元素的索引?
问题描述
我正在看这个问题:
数组的
sort
方法可以接受一个参数,该参数是一个带有两个参数的比较函数——比如 x 和 y。如果 x 应该在 y 之前,该函数返回一个负整数,如果 x 和 y 无法区分,则返回零,如果 x 应该在 y 之后,则返回一个正整数。编写调用,使用箭头函数,排序:
- 按降序排列的正整数数组
- 随着年龄的增长,一群人
- 增加长度的字符串数组
这是我的代码:
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 的索引位置?我也对其他解决方案持开放态度。
PS:这些数组是为了简化思考过程而编造的。
解决方案
这个网站上有大量关于排序的问答。您的尝试似乎表明您还没有看到数字在 JavaScript 中通常是如何排序的。例如这个问答和许多其他的,提供了正确的方法来做到这一点。
对您的尝试的一些评论:
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: 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
推荐阅读
- jenkins - 如何在詹金斯本地更改发件人的电子邮件ID
- seaborn - 为 seaborn 热图分配特定颜色
- node.js - React 在极端套接字更新上执行缓慢
- java - 传感器数据存储以前的值,即使缓存被清除
- r - 寓言:从 ARIMA 模型中提取 p,d,q 规范
- python - Python split()列表索引超出范围与tweepy
- r - 为 R 中最昂贵和最便宜的观察结果着色
- sql-server - SQL Server - 错误:18456,严重性:14,状态:46 原因
- snowflake-cloud-data-platform - How to troubleshoot Snowpipe auto ingest failures?
- c - 我们如何在 DPDK 18.11.9 中访问已接收数据包的有效负载