javascript - 坚持如何从打字稿中的数组计算模式
问题描述
我遇到了一个问题,我应该从打字稿中的数组中找出模式。
我正在使用程序 Visual Studio Code,我知道我需要一个 for 循环,但我不确定我应该循环什么。我还必须确保如果数组为空,则始终显示的数字为 0,并且如果有两个整数显示相同的次数,则较小的数字(无论是正数还是负数)是被作为模式。
目前我有这部分代码:
export let mode = (a: number[]): number => {
let mode: number;
mode = a[0];
if (a.length === 0) {
return 0;
}
for (let i = 1; i < a. length; i++) {
if ()
return mode;
};
我知道在 for 循环之后需要一个 if 语句来在必要时更改模式,但我不确定除此之外。
解决方案
正如你所指出的:你mode
应该是一个函数:
- 接受一个数字数组,并应返回出现次数最多的数字。
- 如果有两个或多个数字共享最高的出现,那么它应该返回具有最小值的数字。
- 如果给定的数组为空,它应该返回 0。
你可以这样做:
- 如果给定数组为空,则立即返回 0。否则继续其余步骤。
- 计算数组中每个数字的出现次数。
- 按出现次数和值对#2 的结果进行排序。按最高出现次数排序,然后是最低值。
- 从#3 中获取第一个项目。
这是一个使用reduce()
执行步骤 #2 和sort()
执行步骤 #3 的实现。
let mode = (numbers: number[]): number => {
if (numbers.length === 0) {
return 0;
}
const m = numbers.reduce((items, current) => {
const item = (items.length === 0) ? null : items.find((x) => x.value === current);
(item) ? item.occurrence++ : items.push({ value: current, occurrence: 1 });
return items;
}, [])
.sort((a, b) => {
if (a.occurrence < b.occurrence) {
return 1;
} else if (a.occurrence > b.occurrence || a.value < b.value) {
return -1;
} else {
return (a.value === b.value) ? 0 : 1;
}
});
return m[0].value;
}
推荐阅读
- razor - 构建具有 N 列、2 行、容器最大高度的 CSS 网格
- python - 在多个文件/目录中搜索字符串,然后打印文本文件的内容
- reactjs - 功能组件内部应该包含什么
- java - 如何知道一个项目是否是 Spring Boot
- filter - 如何在 Data Studio 的自定义查询中添加过滤器?
- oracle - 在 Oracle 中具有聚合的 NOT HAVING(逆 HAVING)子句
- python - Python:如何处理 glob 和 fnmatch 文件名中的国际字符?
- google-bigquery - 从 Google Cloud Function 调用 BigQuery 时如何节省费用
- python - 是否有 Python 包支持 MySQL 和 Pycharm
- python - Python 3.7 - 连接字符串并将它们写入磁盘的快速方法