如何正确筛选数组



大家好这里有一个这样的数据数组

const arrayPat = [
{pat: '111', res: 'qwe', tag: '1'},
{pat: '111', res: 'sda', tag: '2'},
{pat: '111', res: 'xzc', tag: '3'},
{pat: '111', res: 'cej', tag: '4'},
{pat: '222', res: 'qwd', tag: '5'},
{pat: '222', res: 'asd', tag: '6'},
]

需要得到类似的东西

const resultArray: any = [{pat: '111', res: ['qwe', 'sda', 'xzc', 'cej'], tag: '1'},{pat: '222', res: ['qwe', 'asd'], tag: '1'}]

如果确实需要问题中提到的内容,我们可以稍微调整一下代码

const arrayPat = [{
pat: '111',
res: 'qwe',
tag: '1'
},
{
pat: '111',
res: 'sda',
tag: '2'
},
{
pat: '111',
res: 'xzc',
tag: '3'
},
{
pat: '111',
res: 'cej',
tag: '4'
},
{
pat: '222',
res: 'qwd',
tag: '5'
},
{
pat: '222',
res: 'asd',
tag: '6'
},
]
const val = []
arrayPat.forEach((curr) => {
let newPath = val.find(currentItem => currentItem.pat === curr.pat);
if (!newPath) {
val.push({
pat: curr.pat,
res: [curr.res],
tag: curr.tag
})
} else {
newPath.res.push(curr.res)
}
});
console.log(val)

您可能需要数组。减少而不是过滤。其次,从问题中不清楚tag的要求值。您可以修改此答案以设置适当的tag

const arrayPat = [{
pat: '111',
res: 'qwe',
tag: '1'
},
{
pat: '111',
res: 'sda',
tag: '2'
},
{
pat: '111',
res: 'xzc',
tag: '3'
},
{
pat: '111',
res: 'cej',
tag: '4'
},
{
pat: '222',
res: 'qwd',
tag: '5'
},
{
pat: '222',
res: 'asd',
tag: '6'
},
]
const val = arrayPat.reduce((acc, curr) => {
if (!acc[curr.pat]) {
acc[curr.pat] = {
pat: curr.pat,
res: [curr.res],
tag: curr.tag
}
} else {
acc[curr.pat].res.push(curr.res)
}

return acc;
}, {});
console.log(Object.values(val))

最新更新