我有一个Vue.js
网络应用程序,该应用程序使用express.js
API中的数据并在表中显示响应数组。数组的每个对象都有由Name_Version
组成的唯一ID(例如P.90.001000-0004_2
)。问题是我只需要显示每个版本的最新版本。例如,如果API响应为:
[{id: P.90.001000-0004_1}, {id: P.90.001000-0004_2}, {id: P.90.001000-0004_3}, {id: P.90.002222-0025_1}, {id: P.90.002222-0025_2}]
要在表格中显示的结果数组为:
[{id: P.90.001000-0004_3}, {id: P.90.002222-0025_2}]
我不可能达到这个结果,有人可以帮助我吗?
答案 0 :(得分:2)
您可以使用reduce
来获取最新版本,然后将Object.entries
与map
和join
一起使用,以将它们重新设置为格式:
const arr = [{id: 'P.90.001000-0004_1'}, {id: 'P.90.001000-0004_2'}, {id: 'P.90.001000-0004_3'}, {id: 'P.90.002222-0025_1'}, {id: 'P.90.002222-0025_2'}]
const latest = arr.reduce((a, {id}) => {
const [k,v] = id.split('_')
a[k] = +v > (a[k] || 0) ? v : a[k]
return a
}, {})
const output = Object.entries(latest).map(pair => ({ id: pair.join('_')}))
console.log(output)
如果需要保留其余属性,则可以使用地图,并按索引保留对原始对象的引用:
const arr = [{id: 'P.90.001000-0004_1'}, {id: 'P.90.001000-0004_2'}, {id: 'P.90.001000-0004_3'}, {id: 'P.90.002222-0025_1'}, {id: 'P.90.002222-0025_2'}]
const latest = arr.reduce((a, {id}, i) => {
const [k,v] = id.split('_')
if(!a.has(k) || +v > a.get(k)[0]) a.set(k, [+v, i])
return a
}, new Map())
const output = [...latest.values()].map(([,i]) => arr[i])
console.log(output)
答案 1 :(得分:2)
您可以构建一个对象,该对象将ID的一部分(不包括版本)映射到整个对象,并且可以在该映射中仅保留每个项目的最新版本:
jar:file: