在Javascript中,我试图采取数字值的初始数组,并计算其中的元素。理想情况下,结果将是两个新数组,第一个数组指定每个唯一元素,第二个数组包含每个元素出现的次数。但是,我愿意听取关于输出格式的建议。
例如,如果初始数组是:
5, 5, 5, 2, 2, 2, 2, 2, 9, 4
然后将创建两个新数组。第一个将包含每个唯一元素的名称:
5, 2, 9, 4
第二个将包含该元素在初始数组中出现的次数:
3, 5, 1, 1
因为数字5在初始数组中出现了三次,数字2出现了五次,9和4都出现了一次。
我一直在寻找解决方案,但似乎没有一个可行,而且我自己尝试过的每件事最后都出奇地复杂。任何帮助都将不胜感激!
谢谢:)
Const arr = [2,2,5,2,2,2,4,5,5,9];
函数foo(数组){
Let a = [],
B = [],
Arr =…, //克隆数组,这样我们在使用.sort()时不会改变原始数组
prev;
arr.sort ();
For (let元素的arr) {
If (element !== prev) {
a.push(元素);
b.push (1);
}
+ + b (b。长度- 1];
Prev =元素;
}
返回[a, b];
}
Const result = foo(arr);
console.log('(' +结果[0 ] + ']','[' + 结果[1]+ ')')
console.log (arr)
使用MAP,您可以在输出中有两个数组:一个包含出现次数,另一个包含出现次数。
常量数据集=(2、2、4、2、6、4、7、8、5、6、7、10、10、10、15);
Let values = [];
Let keys = [];
var mapwithoccurs = dataset.reduce((a,c) => {
如果(a.has (c)) a.set (c, a.get (c) + 1);
其他a.set (c, 1);
返回一个;
}, new Map())
.forEach((value, key, map) => {
keys.push(关键);
values.push(价值);
});
console.log(键)
console.log(值)
一行ES6解决方案。这么多的答案使用对象作为地图,但我看不到任何人使用实际的地图
const map = arr.reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map());
使用map.keys()获取唯一元素
使用map.values()来获取事件
使用map.entries()获取对[元素,频率]
Var arr = [5,5,5,2,2,2,2,2,2,2,9,4]
Const map = arr。Reduce ((acc, e) => acc。set(e, (acc.get(e) || 0) + 1), new Map());
console.info([…map.keys ()))
console.info([…map.values ()))
console.info([…]. entry ()))
不要使用两个数组的结果,使用一个对象:
a = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
result = { };
for(var i = 0; i < a.length; ++i) {
if(!result[a[i]])
result[a[i]] = 0;
++result[a[i]];
}
然后结果将看起来像:
{
2: 5,
4: 1,
5: 3,
9: 1
}
var array = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
function countDuplicates(obj, num){
obj[num] = (++obj[num] || 1);
return obj;
}
var answer = array.reduce(countDuplicates, {});
// answer => {2:5, 4:1, 5:3, 9:1};
如果你仍然需要两个数组,那么你可以使用这样的答案…
var uniqueNums = Object.keys(answer);
// uniqueNums => ["2", "4", "5", "9"];
var countOfNums = Object.keys(answer).map(key => answer[key]);
// countOfNums => [5, 1, 3, 1];
或者如果你想让unique enum是数字
var uniqueNums = Object.keys(answer).map(key => +key);
// uniqueNums => [2, 4, 5, 9];