坚持如何从打字稿中的数组计算模式

问题描述 投票:0回答:1

我遇到了一个问题,我应该从打字稿中的数组中找出一个模式。

我正在使用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语句,在必要时改变模式,但我不确定。

javascript typescript
1个回答
0
投票

如你所示:你的mode应该是一个函数:

  • 接受一个数字数组,并应返回出现次数最多的数字。
  • 如果有两个或多个共享最高出现次数的数字,则应返回值最小的数字。
  • 如果给定的数组为空,则应返回0。

你可以这样做:

  1. 如果给定的数组为空,则立即返回0。否则继续执行其余步骤。
  2. 计算数组中每个数字的出现次数。
  3. 按出现次数和值对#2的结果进行排序。按最高出现次数排序,然后按最低值排序
  4. 从#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.