我有一个函数可以在javascript中模仿php中的array_count_values函数,但速度不是很快。我想知道有没有办法解决这个问题?
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])
发布于 2019-04-04 23:00:18
您可以使用reduce遍历数组并对每个条目进行计数。
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);
发布于 2019-04-04 22:59:51
你可以接受一个对象进行计数,并省略排序。此方法使用单个循环。
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]));
发布于 2019-04-04 22:58:53
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));https://stackoverflow.com/questions/55519070
复制相似问题