我遇到了一个问题,我应该从打字稿中的数组中找出一个模式。
我正在使用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
应该是一个函数:
你可以这样做:
这是使用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;
}