gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:20:57 27 4
gpt4 key购买 nike

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

鉴于 fiddle 中的 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)" }
]
}
];

如果您注意到 fiddle ,我已经对有关 mapKey 和 mapValue 的部分进行了评论。它们将由从选择选项获得的函数参数确定,以按模型(计数)/年(计数)或年(计数)/模型(计数)排序。

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

  1. 委托(delegate)(委托(delegate)数量)

    • 2007(2007 年模型总数)
      • 模型 1(计数)
      • 模型 2(计数)
    • 2011 年(2007 年模型总数)
  2. 运行(运行次数)

    • 2007(2007 年模型总数)
      • 模型 1(计数)
      • 模型 2(计数)
    • 2011 年(2007 年模型总数)
  3. 已售出(同上)

年份的顺序应基于当年的模型总数(最高的在前)。同理,年份下的机型顺序应按最高数量排序。

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

  1. 委托(delegate)(委托(delegate)数量)

    • 模型 1(所有年份该模型的总数)
      • 第 1 年(今年的模型数)
      • 第 2 年(今年的模型数)
    • 模型 2(所有年份该模型的总数)
  2. 运行(运行次数)

    • 模型 1(所有年份该模型的总数)
      • 第 1 年(今年的模型数)
      • 第 2 年(今年的模型数)
    • 模型 2(所有年份该模型的总数)
  3. 已售出(同上)

它的排序也将基于计数。如果您需要任何说明,请告诉我!谢谢!

最佳答案

您想做的事情的根源很简单。您想要按某些属性对数据进行分组。使它看起来复杂的原因是您想在多个级别上进行。

首先,您有 3 组数据“Consigned”、“Run”、“Sold”。为一个人解决它,你就为所有人解决了它。

首先,您将汽车按型号分组。在模型中,您可以按年份对汽车进行分组。同样,它的核心是您希望按某些属性对数据进行分组。

您可以使用这样的函数来执行此操作:

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/

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

关于javascript - 计算 Javascript 对象数组中的重复对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21488821/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com