计算数组元素的出现/频率

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

在Javascript中,我尝试获取一个数字值的初始数组,并计算其中的元素。理想情况下,结果将是两个新数组,第一个数组指定每个唯一元素,第二个数组包含每个元素发生的次数。

例如,如果初始数组是:

5, 5, 5, 2, 2, 2, 2, 2, 9, 4

然后将创建两个新数组。第一个元素将包含每个唯一元素的名称:

5, 2, 9, 4

第二个元素将包含该元素在初始数组中发生的次数:

3, 5, 1, 1

因为数字5在初始数组中发生了三次,所以数字2发生了五次,9和4都出现了一次。

提问于
用户回答回答于

function foo(arr) {
    var a = [], b = [], prev;

    arr.sort();
    for ( var i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length-1]++;
        }
        prev = arr[i];
    }

    return [a, b];
}
用户回答回答于

可以使用对象来保存结果:

var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
var counts = {};

for (var i = 0; i < arr.length; i++) {
  var num = arr[i];
  counts[num] = counts[num] ? counts[num] + 1 : 1;
}

console.log(counts[5], counts[2], counts[9], counts[4]);

所以,现在计数对象可以告诉某个特定数字的计数是什么:

console.log(counts[5]); // logs '3'

如果想获得一个成员数组,只需使用keys()功能

keys(counts); // returns ["5", "2", "9", "4"]

扫码关注云+社区