我遇到了一个问题,我应该从打字稿中的数组中找出一个模式。
我正在使用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语句,该语句可以在必要时更改模式,但是我不确定。
答案 0 :(得分:0)
如您所述:mode
应该是以下功能:
您可以这样做:
这是一个使用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;
}