如何计算数组的模式JavaScript



我正在编写一个代码,用于查找数组(differenceArr(中一组数字的模式。除了有一个问题,我差点把它破解了。让我给你看我的代码到目前为止,让你可以理解:



var mapping = {};
var counter = 0;
for(var i = 0;i < differenceArr.length; i++){
if (!mapping[differenceArr[i]]) mapping[differenceArr[i]] = 0;
mapping[differenceArr[i]] += 1;
}
var z;
var toValidateModeJSONObj = mapping;
var max_of_difarray = Math.max.apply(Math, differenceArr);
var howManyActuallyExist = -1;
var modeArray = [];
for(var n = 0; n< max_of_difarray; n++){

var exists = toValidateModeJSONObj[differenceArr[n].toString()]; 
if(exists == undefined){
exists = false;

}else{
howManyActuallyExist++;
modeArray[howManyActuallyExist] ={theNumber: differenceArr[n].toString(), theValue: exists};
}
console.log(JSON.stringify(modeArray));

既然我在modeArray中有了所有内容,我必须得到modeArray中哪个theValue最大,然后我必须得到变量中的模式,这样我才能返回它。我该怎么做?有人有工作代码片段吗?

试试这个:(

const getMode = (items) => {
// Go through the array

if (items.length === 0) return -1 // error

const store = {}
let maxCount = 0;
let maxIndex = -1;

items.forEach((item, index) => {
if (!store[item]) {store[item] = 0}

// update value
store[item] += 1

if (store[item] > maxCount) {
maxIndex = index
maxCount = store[item]
}
})

// NOTE: this code does not consider if there are two modes.

return items[maxIndex]
}
// ==========================

const getModeMoreThanOne = (items) => {
// Go through the array

if (items.length === 0) return -1 // error

const store = {}
let maxCount = 0
let maxIndex = -1

items.forEach((item, index) => {
if (!store[item]) {store[item] = 0}

// update value
store[item] += 1

if (store[item] > maxCount) {
maxIndex = index
maxCount = store[item]
}
})


const modes = Object.keys(store).filter(key => store[key] === maxCount)
return modes
}

getMode("abcdefababa".split("")) // 'a'
getModeMoreThanOne("abcdefabbaba".split("")) // ['a', 'b']

最新更新