我的代码很难过。我正在研究一个coderbyte问题,挑战的一部分是找到一组数字的模式。所以我认为我的第一步是创建一个包含数字及其频率的对象。这是我到目前为止所做的:
arr = [1,1,1,6,2,3,4];
mapping = {};
counter = 0
for(var i = 0;i < arr.length; i++){
mapping[arr[i]] = 0;
if(arr[i] == mapping[i.toString])
mapping[i.toString] += 1
}
mapping
但是这给了我{ '1': 0, '2': 0, '3': 0, '4': 0, '6': 0 }
有什么想法吗?
答案 0 :(得分:1)
这更好用:
arr = [1,1,1,6,2,3,4];
mapping = {};
counter = 0
for(var i = 0;i < arr.length; i++){
if (!mapping[arr[i]]) mapping[arr[i]] = 0;
mapping[arr[i]] += 1
}
// mapping = {1: 3, 2:1, 3:1, 4:1, 6:1}
答案 1 :(得分:0)
如果您直接想要模态数组,也可以使用它。
const mode = arr => { if(arr.filter((x,index)=>arr.indexOf(x)==index).length == arr.length) return arr; else return mode(arr.sort((x,index)=>x-index).map((x,index)=>arr.indexOf(x)!=index ? x : null ).filter(x=>x!=null)) }
//模式([1,4,5,5,2,3,3,3,6,6,7,7,7,8,8]) // [3,7]
答案 2 :(得分:0)
var data = [1,1,1,1,2,2,4,4,5,6];
var list = {};
data.forEach(function(e){
if(typeof list[e] == "undefined"){
list[e] = 1;
}else{
list[e] = list[e] + 1 ;
}
});
console.log(list);
&#13;