js按值从对象数组中删除重复项并计算重复项
js remove duplicate from array of objects by values and count duplicates
我有对象数组
const data=[
{typeId: 1, sort: 1, name: "Test1"},
{typeId: 2, sort: 1, name: "Test2"},
{typeId: 1, sort: 2, name: "Test3"},
{typeId: 3, sort: 1, name: "Test4"},
];
我想删除键“typeId”和键“sort”值更大的重复项。我想添加键“计数” - 对象按 typeId 重复的次数。
这就是我想要实现的:
const answer=[
{typeId: 1, sort: 1, name: "Test1", count: 2},
{typeId: 2, sort: 1, name: "Test2", count: 1},
{typeId: 3, sort: 1, name: "Test4", count: 1},
];
我该怎么做?
您可以将对象按 typeId
分组并递增 count
。
此方法假定 sort
的最小值始终为 1。
const
data = [{ typeId: 1, sort: 1, name: "Test1" }, { typeId: 2, sort: 1, name: "Test2" }, { typeId: 1, sort: 2, name: "Test3" }, { typeId: 3, sort: 1, name: "Test4" }],
result = Object.values(data.reduce((r, o) => {
if (r[o.typeId]) r[o.typeId].count++;
else r[o.typeId] = { ...o, sort: 1, count: 1 };
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
此方法适用于 sort
的任何值。
const data = [
{typeId: 1, sort: 1, name: "Test1"},
{typeId: 2, sort: 1, name: "Test2"},
{typeId: 1, sort: 2, name: "Test3"},
{typeId: 3, sort: 1, 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);
我有对象数组
const data=[
{typeId: 1, sort: 1, name: "Test1"},
{typeId: 2, sort: 1, name: "Test2"},
{typeId: 1, sort: 2, name: "Test3"},
{typeId: 3, sort: 1, name: "Test4"},
];
我想删除键“typeId”和键“sort”值更大的重复项。我想添加键“计数” - 对象按 typeId 重复的次数。
这就是我想要实现的:
const answer=[
{typeId: 1, sort: 1, name: "Test1", count: 2},
{typeId: 2, sort: 1, name: "Test2", count: 1},
{typeId: 3, sort: 1, name: "Test4", count: 1},
];
我该怎么做?
您可以将对象按 typeId
分组并递增 count
。
此方法假定 sort
的最小值始终为 1。
const
data = [{ typeId: 1, sort: 1, name: "Test1" }, { typeId: 2, sort: 1, name: "Test2" }, { typeId: 1, sort: 2, name: "Test3" }, { typeId: 3, sort: 1, name: "Test4" }],
result = Object.values(data.reduce((r, o) => {
if (r[o.typeId]) r[o.typeId].count++;
else r[o.typeId] = { ...o, sort: 1, count: 1 };
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
此方法适用于 sort
的任何值。
const data = [
{typeId: 1, sort: 1, name: "Test1"},
{typeId: 2, sort: 1, name: "Test2"},
{typeId: 1, sort: 2, name: "Test3"},
{typeId: 3, sort: 1, 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);