gpt4 book ai didi

javascript - 按属性组合对象数组

转载 作者:行者123 更新时间:2023-11-28 03:55:13 26 4
gpt4 key购买 nike

您好,我正在尝试组合一个对象数组,并且需要最终结果是一个对象数组,其中一个属性是唯一的,另一个是包含原始属性中第二个属性的所有值的数组

我有数组:

let arr = [
{
name: 'cdd_register',
levels: 'read'
}, {
name: 'cdd_register',
levels: 'write'
}, {
name: 'annual_reports',
levels: 'write'
}
];

我期望的结果是:

let result = [
{
name: 'cdd_register',
levels: ['read', 'write']
}, {
name: 'annual_reports',
levels: 'write'
}
];

我从后端收到此响应

data: [{
id:1
label: "Administrator"
name: "admin"
permissions:{
data: [{
id: 4,
name: "cdd_register.read",
label: "Read access on CDD Register module"
}, {
id: 6,
name: "cdd_register.write",
label: "Write access on CDD Register module"
}, {
id: 7,
name: "annual_reports.write",
label: "Write access on Annual Reports module"
}]
}
}]

在此之后

getModules(roles) {
let modules = [];

_.forEach(roles, role => {
_.forEach(role.permissions.data, permission => {
modules.push(permission);
})
});

return _.uniqBy(modules, 'id').map(module => {
let moduleArray = module.name.split('.');
return {
name: moduleArray[0],
levels: moduleArray[1]
}
});
}
}

我得到了现在的结果,但无法找出最好的方法(干净)。

谢谢。

最佳答案

这可以通过多种不同的方式来完成。一种可能的方法是使用一些功能魔法

let arr = [{
name: 'cdd_register',
levels: 'read'
}, {
name: 'cdd_register',
levels: 'write'
}, {
name: 'annual_reports',
levels: 'write'
}];

let result = arr.reduce((acc, x) => {
const found = acc.find(y => (x.name == y.name));
if (!found) {
acc.push({
name: x.name,
levels: arr
.filter(y => (x.name == y.name))
.map(z => (z.levels))
});
}
return acc;
}, [])

console.log(result)

关于javascript - 按属性组合对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47614100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com