javascript - 如何将多个数组和一个字符串组合成一个数组?
问题描述
考虑以下对象:
const test = {
resources: {
gatewayApi: {
resourceUri: 'https://bla',
resourceScope: 'D',
},
msGraphProfile: {
resourceUri: 'https://foo',
resourceScope: ['A', 'B', 'C'],
},
msGraphMail: {
resourceUri: 'https://bar',
resourceScope: ['A'],
},
msGraphGroupMember: {
resourceUri: 'https://bob',
},
},
}
目标是实现一个仅包含以下定义的唯一值的数组resourceScope
:
const result = ['A', 'B', 'C', 'D']
为了达到预期的结果,我采取了以下步骤:
// first create a new array with key value pairs
const newArray = Object.entries(test.resources)
// return only those values that have the property `resourceScope`
const result = newArray.filter(([, val]) => {
if ('resourceScope' in val) { return val.resourceScope }
})
在这一点上,我有点卡住了。我需要将所有返回的数组和一个字符串 ('A') 组合成一个 clean array
。我已经尝试寻找示例,但我无法真正弄清楚。
感谢您的帮助。
解决方案
您可以使用reduce
带有Set
作为累加器值的方法来获取唯一值,然后从该集合创建一个数组。
const test = {"resources":{"gatewayApi":{"resourceUri":"https://bla","resourceScope":"D"},"msGraphProfile":{"resourceUri":"https://foo","resourceScope":["A","B","C"]},"msGraphMail":{"resourceUri":"https://bar","resourceScope":["A"]},"msGraphGroupMember":{"resourceUri":"https://bob"}}}
const uniq = Object
.values(test.resources)
.reduce((r, e) => {
[].concat(e.resourceScope)
.forEach(e => {
if (e) r.add(e)
})
return r;
}, new Set)
const result = Array.from(uniq)
console.log(result)
推荐阅读
- javascript - 在 JavaScript 中为贪吃蛇游戏添加分数
- python - python类打印bash颜色
- react-native - react-native bundling failed 使用 3rd 方库时出现无效调用错误
- c - && 运算符在 do while 循环中的正确用途是什么?
- c# - 星期天时形成一个空行(C#)
- reactjs - 浏览器中未设置 Cookie
- javascript - 如何在使用 GET 和 laravel 搜索后清理 url?
- excel - Excel 将“真”输出到 Outlook 电子邮件而不是数据
- vba - VBA 生成随机唯一的字母数字字符串
- swift - 如何为嵌套在 CollectionView 中的 TableView 设置 DropDelegate 和 DragDelegate?