使用 JavaScript 查找重复条目的最大值
Using JavaScript to find the highest value for duplicate entries
我有一个文档库对象。在该对象中,每个文档都有一个 DCN 编号和一个版本号。有多个 DCN 条目,我需要为每个 DCN 筛选出最高版本号。我不确定如何在 JavaScript 中执行此操作。数组示例如下:
[
{
'DCN': '1234567',
'Version': 1.0
},
{
'DCN': '1234567',
'Version': 2.0
},
{
'DCN': '1234567',
'Version': 3.0
},
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 1.0
},
{
'DCN': '1234568',
'Version': 2.0
},
{
'DCN': '1234568',
'Version': 3.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 3.0
},
{
'DCN': '1234569',
'Version': 4.0
}
]
预期结果如下所示:
[
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 4.0
}
]
我举个例子:
首先,将数据结构从数组转换为映射,其中键是 DCN
值,值是 DCN
所有版本号的数组。
const map = {}
for (let item of <your array of objects here>) {
if (!(item.DCN in map)) {
map[item.DCN] = []
}
map[item.DCN].push(item.value)
}
您现在可以使用 Math.max
函数来查找每个 DCN
的最大值并将结果放入一个新数组中:
const result = []
for (let DCN in map) {
result.push({
DCN,
value: Math.max(...map[DCN])
})
}
reduce
可以做得很好很干净。 reduce()
方法对数组的每个元素执行一个 reducer 函数。 reducer 函数是我们将提供的函数,它将帮助保持最大版本号。
const arr = [
{
'DCN': '1234567',
'Version': 1.0
},
{
'DCN': '1234567',
'Version': 2.0
},
{
'DCN': '1234567',
'Version': 3.0
},
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 1.0
},
{
'DCN': '1234568',
'Version': 2.0
},
{
'DCN': '1234568',
'Version': 3.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 3.0
},
{
'DCN': '1234569',
'Version': 4.0
}
];
var result = Object.values(arr.reduce((r,o) => {
if(o.DCN in r) {
if(o.Version > r[o.DCN].Version)
r[o.DCN] = Object.assign({},o);
} else {
r[o.DCN] = Object.assign({}, o);
}
return r;
},{}));
console.log(result);
我有一个文档库对象。在该对象中,每个文档都有一个 DCN 编号和一个版本号。有多个 DCN 条目,我需要为每个 DCN 筛选出最高版本号。我不确定如何在 JavaScript 中执行此操作。数组示例如下:
[
{
'DCN': '1234567',
'Version': 1.0
},
{
'DCN': '1234567',
'Version': 2.0
},
{
'DCN': '1234567',
'Version': 3.0
},
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 1.0
},
{
'DCN': '1234568',
'Version': 2.0
},
{
'DCN': '1234568',
'Version': 3.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 3.0
},
{
'DCN': '1234569',
'Version': 4.0
}
]
预期结果如下所示:
[
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 4.0
}
]
我举个例子:
首先,将数据结构从数组转换为映射,其中键是 DCN
值,值是 DCN
所有版本号的数组。
const map = {}
for (let item of <your array of objects here>) {
if (!(item.DCN in map)) {
map[item.DCN] = []
}
map[item.DCN].push(item.value)
}
您现在可以使用 Math.max
函数来查找每个 DCN
的最大值并将结果放入一个新数组中:
const result = []
for (let DCN in map) {
result.push({
DCN,
value: Math.max(...map[DCN])
})
}
reduce
可以做得很好很干净。 reduce()
方法对数组的每个元素执行一个 reducer 函数。 reducer 函数是我们将提供的函数,它将帮助保持最大版本号。
const arr = [
{
'DCN': '1234567',
'Version': 1.0
},
{
'DCN': '1234567',
'Version': 2.0
},
{
'DCN': '1234567',
'Version': 3.0
},
{
'DCN': '1234567',
'Version': 4.0
},
{
'DCN': '1234568',
'Version': 1.0
},
{
'DCN': '1234568',
'Version': 2.0
},
{
'DCN': '1234568',
'Version': 3.0
},
{
'DCN': '1234568',
'Version': 4.0
},
{
'DCN': '1234569',
'Version': 3.0
},
{
'DCN': '1234569',
'Version': 4.0
}
];
var result = Object.values(arr.reduce((r,o) => {
if(o.DCN in r) {
if(o.Version > r[o.DCN].Version)
r[o.DCN] = Object.assign({},o);
} else {
r[o.DCN] = Object.assign({}, o);
}
return r;
},{}));
console.log(result);