我正在编写一个代码,用于查找数组(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']