gpt4 book ai didi

javascript - 如何在不改变任何东西的情况下找到数组中最常出现的项目?

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

我想知道如何在不使用 immutable.js 的情况下在纯 javascript 的不可变实现中重构此代码。

var arr1=[3, 'oo', 'oo', 'oo', 2, 3, 'oo', 3, 'oo', 2, 4, 9, 3];
var mf = 1;
var m = 0;
var item;
for (var i=0; i<arr1.length; i++)
{
for (var j=i; j<arr1.length; j++)
{
if (arr1[i] == arr1[j])
m++;
if (mf<m)
{
mf=m;
item = arr1[i];
}
}
m=0;
}
console.log(item+" ( " +mf +" times ) ");

最佳答案

看起来您正在尝试查找数组中出现频率最高的项目。用reduce统计每个元素的重复次数,求最大重复次数。

在减少时,确保每次都为累加器返回一个对象,这样您就不会发生变异。

const arr1 = [3, 'oo', 'oo', 'oo', 2, 3, 'oo', 3, 'oo', 2, 4, 9, 3];
const reps = arr1.reduce((accum, item) => {
const newCount = (accum[item] || 0) + 1;
return { ...accum, [item]: newCount };
}, {});
const maxTimes = Math.max.apply(null, Object.values(reps));
const [recordItem] = Object.entries(reps).find(([, val]) => val === maxTimes);

console.log(recordItem + " ( " + maxTimes +" times ) ");

如果您需要识别与记录匹配的所有项,则使用filter而不是find:

const arr1 = [3, 'oo', 'oo', 'oo', 2, 3, 'oo', 3, 'oo', 2, 4, 9, 3, 3];
const reps = arr1.reduce((accum, item) => {
const newCount = (accum[item] || 0) + 1;
return { ...accum, [item]: newCount };
}, {});
const maxTimes = Math.max.apply(null, Object.values(reps));
const recordItems = Object.entries(reps)
.filter(([, val]) => val === maxTimes)
.map(([key, val]) => key);

console.log(recordItems.join(', ') + " ( " + maxTimes +" times ) ");

关于javascript - 如何在不改变任何东西的情况下找到数组中最常出现的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184937/

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