Javascript中的查找模式

Javascript中的查找模式,javascript,arrays,object,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])

我的代码使用起来很困难。我正在研究一个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
arr=[1,1,1,6,2,3,4];
映射={};
计数器=0
对于(变量i=0;i
但这给了我
{1':0,'2':0,'3':0,'4':0,'6':0}

有什么想法吗?

这样效果更好:

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}
arr=[1,1,1,6,2,3,4];
映射={};
计数器=0
对于(变量i=0;i
如果您直接想要模态数组,也可以使用它

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,8]) //[3,7]

var数据=[1,1,1,2,2,4,4,5,6];
var list={};
data.forEach(函数(e){
if(列表类型[e]=“未定义”){
列表[e]=1;
}否则{
列表[e]=列表[e]+1;
}
});

控制台日志(列表)您可能想调用toString函数-i.toString()。请尝试以下jsbin:。可能是我误解了任务,请解释一下。你能解释一下吗!映射[arr[i]]
在递增计数器之前,必须确保属性存在。所以,
!映射[arr[i]
执行此检查。更清晰的检查可以类似于
if(mapping[arr[i]]==undefined)
.Hm为什么不将if语句括在括号中?通常不建议使用这种形式。它只能用于非常简单和简短的语句。请查看并获取更多详细信息。输入key break;)