【问题标题】:Unique associative array with count具有计数的唯一关联数组
【发布时间】:2013-08-29 09:30:56
【问题描述】:

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

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"]

【问题讨论】:

  • 您可以对原始数组(或它的深层副本)进行排序,然后计算双精度数。顺便提一句。在您的示例中有 14 个As 和 6 个IMGs...
  • 谢谢。但问题确实在于,使用与标签关联的计数来构建新的关联数组。

标签: javascript jquery arrays unique associative


【解决方案1】:

你不能得到

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 here

如果你需要支持没有“reduce”的浏览器,可以在underscore.js找到reduce

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

jsFiddle 带下划线here

【讨论】:

  • 非常感谢您的努力和帮助。我确实更喜欢 Ecmascript 5 选项,因为它返回一个对象,这样可以更灵活地使用它。对于不支持 reduce 的浏览器... WC - 谁在乎 ;) :) 再次感谢!
【解决方案2】:
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/

【讨论】:

  • 感谢您的帮助。我更喜欢以下似乎更轻量级的方法。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多