具有计数的唯一关联数组

Unique associative array with count

本文关键字:唯一 关联 数组      更新时间:2023-09-26

无法找到用数组实现以下目标的方法。不过,我打算将数组减少为唯一值,以获得每个唯一元素的总数。例如,获得一个最终数组,如:

var data = [14:"A",5:"IMG",2:"SPAN"]

其对应于与标签本身相关联的每个唯一标签中的项目的总数。我的原始样本阵列如下:

var data = ["A", "A","A","IMG","IMG","A","A","IMG","A","A","IMG","A","A","IMG","IMG","A","A","A","A","A","SPAN","SPAN"]

您无法获得

var data = [14:"A",5:"IMG",2:"SPAN"]

因为这不是有效的JavaScript。此外,如果不同标签的计数相似,则会得到重复的密钥。转换键/值,并使用JavaScript对象:

var reduced = {A: 14, IMG: 6, SPAN: 2};  

在Ecmascript 5:中

var data = ["A","A","A","IMG","IMG","A","A","IMG","A","A","IMG","A","A","IMG","IMG","A","A","A","A","A","SPAN","SPAN"]; 
var reduced = data.reduce(function (result, item) {
    result[item] = (result.hasOwnProperty(item) ? result[item] : 0) + 1; 
    return result; 
}, {}); 
console.log(reduced); // Object {A: 14, IMG: 6, SPAN: 2}

jsFiddle此处

如果你需要支持没有"reduce"的浏览器,你可以在undercore.js 中找到reduce

var reduced = _.reduce(data, function (result, item) {
    result[item] = (result.hasOwnProperty(item) ? result[item] : 0) + 1; 
    return result; 
}, {}); 

jsFiddle此处带下划线

var data = ["A", "A", "A", "IMG", "IMG", "A", "A", "IMG", "A", "A", "IMG", "A", "A", "IMG", "IMG", "A", "A", "A", "A", "A", "SPAN", "SPAN"];
var temp = [];
$.each(data,function(i,v){
 if ($.inArray(v, temp) == -1) temp.push(data[i]);
});
var count = [];
var c = 0;
$.each(temp,function(i,v){
  $.each(data,function (index, val) {
    if (v == val) c++;
   });
   count.push(c);
   c = 0;
});
var obj = {};
for (var i = 0; i < count.length; i++) {
  obj[temp[i]] = count[i]
 }
 console.log(obj); //Object { A=14, IMG=6, SPAN=2}

http://jsfiddle.net/aqPb2/2/