js通过值从对象数组中删除重复项并计算重复项

问题描述

我有对象数组

const data=[
  {typeId: 1,sort: 1,name: "Test1"},{typeId: 2,name: "Test2"},{typeId: 1,sort: 2,name: "Test3"},{typeId: 3,name: "Test4"},];

我想通过键“ typeId”删除重复项,并且键“ sort”的值较大。而且我想添加键“ count”-对象通过typeId重复多少次。

这是我要实现的目标:

const answer=[
  {typeId: 1,name: "Test1",count: 2},name: "Test2",count: 1},name: "Test4",];

我该怎么做?

解决方法

您可以将一个对象用于按typeId进行分组并递增count

此方法假定sort的最小值始终为1。

const 
    data = [{ typeId: 1,sort: 1,name: "Test1" },{ typeId: 2,name: "Test2" },{ typeId: 1,sort: 2,name: "Test3" },{ typeId: 3,name: "Test4" }],result = Object.values(data.reduce((r,o) => {
        if (r[o.typeId]) r[o.typeId].count++;
        else r[o.typeId] = { ...o,count: 1 };
        return r;
    },{}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

,

此方法适用于sort的任何值。

const data = [
  {typeId: 1,name: "Test1"},{typeId: 2,name: "Test2"},{typeId: 1,name: "Test3"},{typeId: 3,name: "Test4"},];

const answer = Object.values(data.reduce((p,v) => {
  const old = p[v.typeId];
  if (!old)
    p[v.typeId] = { ...v,count: 1 };
  else if (old.sort > v.sort)
    p[v.typeId] = { ...v,count: old.count + 1 };
  else
    p[v.typeId].count++;
  return p;
},{}));

console.log(answer);