我需要查看一个未知值数组,并计算每个唯一值的数量,然后将计数和值推到一个新数组中。所以说我有以下数组:
["123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891"]
我想获取此数组并从中获取以下数组:
["123", 12, "456", 12, "678", 12, "891", 12]
无论原始数组中有多少个值,它都会获取值和出现的次数:
["value", number of occurences]
这是我为完成此任务而做的尝试,但还是很粗略,我想学习/使用一种更清洁的方法。
function _sortData(data) {
var tempDataHolder = [];
var dataId = data[0];
var matches = 0;
var dataLength = data.length;
for (var i = 0; i <= dataLength - 1; i++) {
if(dataId === data[i]) {
matches++;
data.splice(i, 1);
i--;
} else if(data.length === 1 && dataId === data[0]) {
matches++;
}
if(i >= data.length){
tempDataHolder.push(dataId, matches);
if(data[0]){
i = 0;
dataLength = data.length;
dataId = data[0];
matches = 0;
}
}
}
return tempDataHolder;
}
编辑:男人在这里有一些很棒的答案。你们会说什么是“最佳”解决方案?无论哪种方式,我都可以从所有答案中学到很多东西,它们似乎都可以解决我的问题。
这是使用reduce
和的解决方案Object.keys
:
function sortData(data) {
var map = data.reduce(function (map, val) {
map[val] = (map[val] || 0) + 1;
return map;
}, {});
return Object.keys(map).reduce(function (result, key) {
return result.concat([key, map[key]]);
}, []);
}
// Test it:
var data = ["123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891", "123", "456", "678", "891"];
var result = sortData(data);
console.log(result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句