在Javascript中查找模式

时间:2014-09-27 21:01:49

标签: javascript arrays object

我的代码很难过。我正在研究一个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 }

有什么想法吗?

3 个答案:

答案 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)

&#13;
&#13;
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;
&#13;
&#13;