在Javascript中,我尝试获取一个初始的数值数组,并对其中的元素进行计数。理想情况下,结果应该是两个新数组,第一个指定每个唯一的元素,第二个包含每个元素出现的次数。但是,我对输出格式的建议持开放态度。
例如,如果初始数组为:
5, 5, 5, 2, 2, 2, 2, 2, 9, 4
然后将创建两个新的数组。第一个将包含每个唯一元素的名称:
5, 2, 9, 4
第二个将包含该元素在初始数组中出现的次数:
3, 5, 1, 1
因为数字5在初始数组中出现了三次,所以数字2出现了五次,9和4都出现了一次。
我已经寻找了很多解决方案,但似乎都不起作用,而且我自己尝试的一切都变得非常复杂。任何帮助都将不胜感激!
谢谢:)
发布于 2011-04-15 02:58:56
const arr = [2, 2, 5, 2, 2, 2, 4, 5, 5, 9];
function foo (array) {
let a = [],
b = [],
arr = [...array], // clone array so we don't change the original when using .sort()
prev;
arr.sort();
for (let element of arr) {
if (element !== prev) {
a.push(element);
b.push(1);
}
else ++b[b.length - 1];
prev = element;
}
return [a, b];
}
const result = foo(arr);
console.log('[' + result[0] + ']','[' + result[1] + ']')
console.log(arr)
发布于 2011-04-15 02:42:13
您可以使用对象来保存结果:
const arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
const counts = {};
for (const num of arr) {
counts[num] = counts[num] ? counts[num] + 1 : 1;
}
console.log(counts[5], counts[2], counts[9], counts[4]);
现在,您的counts
对象可以告诉您某个特定数字的计数:
console.log(counts[5]); // logs '3'
如果想要获取成员数组,只需使用keys()
函数
keys(counts); // returns ["5", "2", "9", "4"]
发布于 2011-04-15 05:09:25
const occurrences = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4].reduce(function (acc, curr) {
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
}, {});
console.log(occurrences) // => {2: 5, 4: 1, 5: 3, 9: 1}
https://stackoverflow.com/questions/5667888
复制相似问题