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

计算Javascript对象数组中的重复对象,javascript,jquery,json,multidimensional-array,Javascript,Jquery,Json,Multidimensional Array,我试图解析Javascript对象的子对象,以计算相同子对象的数量,并返回一个具有这些数量的新JSON对象。这可能不是很清楚,所以这里是答案 考虑到小提琴中的数据,我想返回以下内容: objToReturn = [ { key: "Consigned", values: [ { mapKey: 2007 (4), mapV

我试图解析Javascript对象的子对象,以计算相同子对象的数量,并返回一个具有这些数量的新JSON对象。这可能不是很清楚,所以这里是答案

考虑到小提琴中的数据,我想返回以下内容:

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树,它基本上如下所示:

寄售的

2007 2007车型总数 模型1计数 模型2计数 2011年2007款车型总数 连续运行

2007 2007车型总数 模型1计数 模型2计数 2011年2007款车型总数 销售同上 年份顺序应以该年的车型总数为基础。同样,年份下的模型顺序应按最高计数排序

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

寄售的

模型1所有年份此模型的总计数 今年第一年的车型计数 第2年今年的车型计数 模型2所有年份此模型的总计数 连续运行

模型1所有年份此模型的总计数 今年第一年的车型计数 第2年今年的车型计数 模型2所有年份此模型的总计数 销售同上
这一点的排序也将基于计数。如果您需要任何澄清,请告诉我!谢谢

你想做的事情的根源很简单。您希望按某些属性对数据进行分组。让它看起来复杂的是,你想在几个层次上完成它

首先,您有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)
您可以在这个JSFIDLE中使用它:


通过在每个级别进行分组,您可以完成您想要完成的任务。一年一组。然后,每年检查每个生成组和组。您的计数将是值数组的长度。

要执行的操作的根很简单。您希望按某些属性对数据进行分组。让它看起来复杂的是,你想在几个层次上完成它

首先,您有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)
您可以在这个JSFIDLE中使用它:


通过在每个级别进行分组,您可以完成您想要完成的任务。一年一组。然后,每年检查每个生成组和组。您的计数将是值数组的长度。

kiddie avalanche脚本不是json 5,4,3@WillWeld这不是json。JSON是一种符号。这里有一个JavaScript对象。@ExplosionPills Oops…更改了标题-更好吗?编辑:我的语义学很差。objToReturn是Javascript对象的JSON数组吗?或者它是一个包含子对象的Javascript对象?@WillWeld-它是一个对象数组。请确认脚本kiddie avalanche,这不是json 5,4,3@WillWeld这不是json。JSON是一种符号。这里有一个JavaScript对象。@ExplosionPills Oops…更改了标题-更好吗?编辑:我的语义学很差。objToReturn是Javascript对象的JSON数组吗?或者它是一个包含子对象的Javascript对象?@WillWeld-它是一个对象数组。这太棒了!非常感谢你!你做到了,朋友,这太棒了!非常感谢你!你做到了,我的朋友