首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript如何优化此计数数组值函数

Javascript如何优化此计数数组值函数
EN

Stack Overflow用户
提问于 2019-04-04 22:55:17
回答 6查看 165关注 0票数 0

我有一个函数可以在javascript中模仿php中的array_count_values函数,但速度不是很快。我想知道有没有办法解决这个问题?

代码语言:javascript
复制
function array_count_values(arr) {
    let a = [], prev;
    arr.sort();
    for ( let i = 0; i < arr.length; i++ ) {
        if ( arr[i] !== prev ) {
            a.push(1)
        } else {
            a[a.length-1]++;
        }
        prev = arr[i];
    }
    return a;
}

它只返回一个简单的数字数组和计数,就像2,1,2,1,1一样。本例中的输入将是长度为5-7个元素的数字数组,例如array_count_values([6,4,10,6,6])

EN

回答 6

Stack Overflow用户

发布于 2019-04-04 23:00:18

您可以使用reduce遍历数组并对每个条目进行计数。

代码语言:javascript
复制
function array_count_values(arr) {
  return arr.reduce((c, v) => {
    c[v] = c[v] || 0;
    c[v]++;
    return c;
  }, {})
}

var result = array_count_values([6, 4, 10, 6, 6]);

console.log(result);

票数 4
EN

Stack Overflow用户

发布于 2019-04-04 22:59:51

你可以接受一个对象进行计数,并省略排序。此方法使用单个循环。

代码语言:javascript
复制
function array_count_values(array) {
    var count = {},
        i;

    for (i = 0; i < array.length; i++) {
        if (array[i] in count) {
            count[array[i]]++;
        } else {
            count[array[i]] = 1;
        }
    }
    return Object.values(count).sort((a, b) => b - a);
}

console.log(array_count_values([6, 4, 10, 6, 6]));

票数 3
EN

Stack Overflow用户

发布于 2019-04-04 22:58:53

代码语言:javascript
复制
const arr = [1, 2, 2, 3];

function array_count_values (arr) {
  const frequencies = arr.reduce((f, v) => {
    const freq = f.get(v) || 0; 

    f.set(v, freq + 1);
    return f;
  }, new Map());

  return arr.map(v => frequencies.get(v));
}

console.log(array_count_values(arr));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55519070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档