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