【问题标题】:How to return duplicate count of objects from an array in JavaScript ES5如何在 JavaScript ES5 中从数组中返回重复的对象计数
【发布时间】:2021-06-24 18:21:58
【问题描述】:

我正在使用下面的代码来获取数组中重复对象的计数。

我正在通过一个包含组的表进行查询,而且它很复杂。我将组及其复杂性传递给一个对象。我有重复的条目,例如

[
    {group: A, complexity: Simple},
    {group: A, complexity: Complex},
    {group: A, complexity: Simple},
    {group: B, complexity: Simple},
    {group: A, complexity: Medium}
]

我需要如下所示的重复次数

[
    {group: A, complexity: Simple}: 2,
    {group: A, complexity: Complex}: 1,
    {group: B, complexity: Simple}: 1,
    {group: C, complexity: Medium}: 1
] 

var data = {};
var app = [];

for(let i=0; i<=2; i++){
  var fName = "Ram";
  var lName = "Krishna";
data = { "ID": fName, "Status": lName };
app.push(data);
}

var call = JSON.stringify(duplicate(app));
console.log("call: " + call);


function duplicate(app)
{
var counts = {};

for(var i =0; i < app.length; i++)
{
 
  var ab = JSON.stringify(app[i]);
    if (counts[ab])
    {
       counts[ab] += 1;
    }else{
       counts[ab] = 1;
    }
} 
return counts;

}

我得到以下输出

call: {"{\"ID\":\"Ram\",\"Status\":\"Krishna\"}":3}

我期待什么

call: {"{"ID":"Ram","Status":"Krishna"}":3}

谁能帮我解决这个问题?

【问题讨论】:

  • 为什么要字符串化?如果不进行字符串化和记录会发生什么?
  • 如果我不使用字符串化。我得到 [object Object]
  • 这里有很多不好的做法不要将对象字符串化以使其成为关键,您需要清楚自己想要什么。为什么你想让 object 成为你的 count 对象中的关键。
  • 为了帮助您解决问题,我们需要更多信息
  • 你的对象每次都会有相同的键吗?

标签: javascript arrays ecmascript-5


【解决方案1】:

使用以下方法,可以进一步改进:

const getDuplicates = arr => { 
  const dupCount = arr.reduce((acc, curr) => {
    acc[curr] = acc[curr] ? acc[curr] + 1 : 1;
    return acc;
  }, {});
  return Object.entries(dupCount).filter(([k, v]) => v > 1).map(([k, v]) => k)
}

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 2016-04-25
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多