【问题标题】:Finding Mode in Javascript在 Javascript 中查找模式
【发布时间】:2014-11-22 14:57:21
【问题描述】:

我的代码遇到了困难。我正在研究一个 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 }

有什么想法吗?

【问题讨论】:

  • 你可能想调用 toString 函数 - i.toString()。

标签: javascript arrays object


【解决方案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}

【讨论】:

  • 试试这个jsbin:jsbin.com/wunohabifuso/1/edit。可能是我误解了任务,请解释一下。
  • 你能解释一下!mapping[arr[i]]什么是假的
  • 在递增计数器之前,我们必须确保该属性存在。因此,!mapping[arr[i]] 会进行此项检查。更清晰的检查可以看起来像if (mapping[arr[i]] === undefined)
  • 嗯,为什么if语句不用括号括起来?
  • 通常不推荐的形式。它只能用于非常简单和简短的陈述。请查看herehere 了解更多详情。
【解决方案2】:

如果你直接想要模态数组,你也可以使用它。

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]

【讨论】:

  • 输入键损坏; )
【解决方案3】:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2019-03-24
    • 2013-02-21
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多