计算Javascript对象数组中的重复对象

我正在尝试解析Javascript对象的子对象以计算相同的子对象的数量,并返回具有这些计数的新JSON对象。 这可能不是很清楚,所以这里是小提琴 。

鉴于小提琴中的crsListData ,我想返回这个:

 objToReturn = [ { key: "Consigned", values: [ { mapKey: 2007 (4), mapVal: [["Ford F-150 (3)"], ["Honda Civic (1)"]] }, { mapKey: 2011 (1), mapVal: "Toyota Camry (1)" }, { mapKey: 2005 (1), mapVal: "Dodge RAM (1)" } ] }, { key: "Run", values: [ { mapKey: 2007 (2), mapVal: "Ford F-150 (2)" }, { mapKey: 2011 (1), mapVal: "Toyota Camry (1)" } ] }, { key: "Sold", values: [ { mapKey: 2007 (1), mapVal: "Ford F-150 (1)" }, { mapKey: 2011 (1), mapVal: "Toyota Camry (1)" } ] } ]; 

如果您在小提琴中注意到,我已经评论了关于mapKey和mapValue的部分内容。 它们将由从选择选项获得的函数参数确定,以按模型(计数)/年(计数)或年(计数)/模型(计数)排序。

我的最终目标是生成一个基本上如下所示的HTML树:

  1. 寄售(寄售#)

    • 2007年(2007款车型总数)
      • 型号1(计数)
      • 型号2(计数)
    • 2011年(2007款车型总数)
  2. 跑(跑步#)

    • 2007年(2007款车型总数)
      • 型号1(计数)
      • 型号2(计数)
    • 2011年(2007款车型总数)
  3. 已售(与上述相同)

年份的顺序应基于该年度的模型总数(最高#第一)。 同样,多年来模型的顺序应按最高计数排序。

或者,如果用户选择模型/年份进行分组,我想生成:

  1. 寄售(寄售#)

    • Model1(所有年份此型号的总数)
      • 1年级(今年的模特数)
      • 2年级(今年的模特数)
    • Model2(所有年份此型号的总数)
  2. 跑(跑步#)

    • Model1(所有年份此型号的总数)
      • 1年级(今年的模特数)
      • 2年级(今年的模特数)
    • Model2(所有年份此型号的总数)
  3. 已售(与上述相同)

这个的顺序也将基于计数。 如果您需要任何澄清,请告诉我! 谢谢!

你想做的事情的根本很简单。 您想要按某些属性对数据进行分组。 让它看起来很复杂的是你想在几个层面上做到这一点。

首先,您有3组数据“寄售”,“运行”,“已售出”。 解决它,你解决所有问题。

首先,您按车型分类。 在模型中,您可以按年份分组。 同样,它的核心是你想要通过某些属性对数据进行分组。

你可以使用这样的函数来做到这一点:

 var cars = [ { year: 2007, model: "Ford F-150" }, { year: 2011, model: "Toyota Camry" }, { year: 2007, model: "Ford F-150" }, { year: 2007, model: "Ford F-150" }, { year: 2005, model: "Dodge RAM" } ]; function groupBy(propertyName, array) { var groupedElements = {}; for(var i = 0; i < array.length; i++) { var element = array[i]; var value = element[propertyName]; var group = groupedElements[value]; if(group == undefined) { group = [element]; groupedElements[value] = group; } else { group.push(element); } } return groupedElements; } var result = groupBy("year", cars) 

输出将是这样的:

 { "2005": [ { "year": 2005, "model": "Dodge RAM" } ], "2007": [ { "year": 2007, "model": "Ford F-150" }, { "year": 2007, "model": "Ford F-150" }, { "year": 2007, "model": "Ford F-150" } ], "2011": [ { "year": 2011, "model": "Toyota Camry" } ] } 

你可以在这个JSFiddle中玩它: http : //jsfiddle.net/luisperezphd/jCt2k/

您可以在每个级别完成您想要进行此分组的操作。 第一组逐年。 然后逐年查看每个生成组。 您的计数将是值数组的length