gpt4 book ai didi

javascript - 我怎样才能改进这个 MODE.MULT 的实现

转载 作者:行者123 更新时间:2023-11-29 18:25:15 25 4
gpt4 key购买 nike

我写了一个相对复杂的 Microsoft Excel 的 MODE.MULT 实现函数,它返回数组中最常出现或重复的值的数组。它是通过三个循环实现的,其中一个循环嵌套到另一个循环中,我怀疑有一种更简单的方法可以解决这个问题。有关信息,它使用 _.uniq来自 Lo-Dash用于从返回的数组中提取重复值。

function MODEMULT(range) {
var n = range.length;
var max = 0;
var counts = new Array();
var result = new Array();
for (var i = 0; i < n; i++) {
counts[i] = 0;
for (var j = 0; j < n; j++) {
if (range[j] === range [i]) {
counts[i]++;
max = (counts[i] > max) ? counts[i] : max;
}
}
}
for (var k = 0; k < n; k++) {
if (counts[k] === max) {
result.push(range[k]);
}
}
return _.uniq(result);
}

出于测试目的,MODEMULT([1,2,3,4,3,2,1,2,3]) 应该返回 [2,3]

预先感谢您的帮助!

最佳答案

你可以使用更少的循环,尽管这会对内存使用产生影响,因为你将对原始范围内的所有唯一条目进行计数:

function MODEMULT(range) {
var n = range.length,
// object to hold the number of occurrences per entry
count= {},
// array to hold those numbers which have the current max occurrences
maxItems = [],
// reference to the current maximum
max = 0,
// JSLint placement of currentItem used inside the loop
currentItem;

for (var i = 0; i < n; i++) {
currentItem= range[i];

// Update the occurrences table.
count[currentItem] = count[currentItem] ? count[currentItem] + 1 : 1;

// If a new maximum is created, void the original maxItems and update max.
if (count[currentItem] > max) {
max = count[currentItem];
maxItems = [];
}

// If the entry reaches the current max, add it to maxItems.
if (count[currentItem] === max) {
maxItems[maxItems.length] = currentItem;
}
}

// No need for unique, as a duplicate value
// will increase max and thus empty out maxItems.
return maxItems;
}

关于javascript - 我怎样才能改进这个 MODE.MULT 的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14161632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com