计算数组元素的出现次数/频率
|
在Javascript中,我试图获取数字值的初始数组并计算其中的元素。理想情况下,结果将是两个新数组,第一个数组指定每个唯一元素,第二个数组包含每个元素出现的次数。但是,我愿意就输出格式提出建议。
例如,如果初始数组为:
5, 5, 5, 2, 2, 2, 2, 2, 9, 4
然后将创建两个新的数组。第一个将包含每个唯一元素的名称:
5, 2, 9, 4
第二个将包含元素在初始数组中出现的次数:
3, 5, 1, 1
因为数字5在初始数组中出现3次,所以数字2出现5次,而9和4都出现一次。
我已经寻找了很多解决方案,但似乎没有任何效果,而且我尝试过的所有事情都变得异常复杂。任何帮助,将不胜感激!
谢谢 :)
没有找到相关结果
已邀请:
30 个回复
娠侈脚惮顽
现场演示:http://jsfiddle.net/simevidas/bnACW/ 注意 这将使用
更改原始输入数组的顺序。
师埠女
导力疵谜
磐剩
这样:
正如其他人指出的那样,您可以随后对结果执行
和
函数,以分别获取唯一编号及其出现的位置。但是以我的经验,原始对象要容易得多。
舞备联
看起来像:
冕偷淮款
本示例将输入数组传递给
构造函数,以创建唯一值的集合。然后,spread语法会将这些值扩展为一个新数组,因此我们可以调用
并将其转换为
对的二维数组-即以下结构:
然后将新数组传递给
构造函数,从而产生一个可迭代的对象:
对象的妙处在于它保留了数据类型-也就是说
将返回
,而
将返回
。它还允许将任何值/类型用作键,这意味着该解决方案也将与对象数组一起使用。
傻寺俊擒
春驹晴陪
窃誓额
编辑(6/12/2015): 由内而外的解释。 countMap是一个映射图,它用单词的频率映射单词,我们可以看到匿名函数。 reduce所做的是将带有参数的函数应用于所有数组元素,并将countMap作为最后一个函数调用的返回值传递。最后一个参数({})是第一个函数调用的countMap的默认值。
佬棠
一个Map而不是Plain Object可以帮助我们区分不同类型的元素,否则所有计数都基于字符串
荆怖赡
使用
获得独特的元素 用
得到 用
获得对[元素,频率] 我参加聚会有点晚了,但我希望至少有人会有所帮助。
痰嫉
所以你的第一个数组是
第二个数组是
如果可用,其中大多数将默认为本地javascript函数 演示:http://jsfiddle.net/dAaUU/
骨酚柯
来减少代码大小并提高可读性。
宦哨抹存胳
或者,您可以使用
:
耐扫鹤胶鞭
编辑:既然你想要所有的事情...
邵酮
通过使用
,起始数组可以包含任何类型的对象,并且计数将是正确的。没有
,某些类型的对象将给您带来奇怪的数。 有关差异的更多信息,请参见ѭ20文档。 如果您所有的值都是符号,数字或字符串,也可以用一个对象来完成:
或者使用解构和对象散布语法以某种功能性稍稍稍稍变而无变化:
此时,您可以使用
或对象进行计数(与对象不同,地图可以直接迭代),或将其转换为两个数组。 对于
:
或针对对象:
苦诫
如果仍然需要两个数组,则可以使用像这样的答案...
或者如果您希望uniqueNums为数字
邵酮
辩谷变充
搜洼挂时
链接到REPL。
抵舵
暑袜眠退
凡夕
琳娘
外镶受继
视蕉梁拌客
部分的内侧取出
誓猎贰
进行此操作。 这里的代码示例
countBy文档在文档中
稀瓣囊
我在这里做的是,首先删除重复项并保存数组(distinctArr),然后在原始数组(yourArray)上计算对象被复制的时间,然后在出现的值上添加第4个属性 希望它对需要此特定解决方案的人有所帮助 Ofc由ES6制成
镶骄册筷
蹄寄噬非芹