javascript - 从对象数组构建邻接矩阵
问题描述
我有一个简单的 JavaScript 对象数组,例如
const drawings = [
{
name: "Foo",
category: "widget"
},
{
name: "Bar",
category: "widget"
},
{
name: "Bar",
category: "fidget"
},
]
等,其中名称和类别都有重复。我想要结束的本质上是一个对象列表(这是为了满足第 3 方库的接口),其中每个对象代表一个名称,然后对于每个类别都有一个属性,该属性为真或假,取决于原始列表。因此,对于示例,输出将是:
const output = [
{
name: "Foo",
widget: true,
fidget: false
},
{
{
name: "Bar",
widget: true,
fidget: true
},
]
解决方案
我将首先浏览并制作您的类别对象,其中类别为键,默认值为false
.
然后,您可以将其分配给每个对象,并在您完成时将正确的键设置为 true。
const drawings = [{name: "Foo",category: "widget"},{name: "Bar",category: "widget"},{name: "Bar",category: "fidget"},]
// make category object where everything is false
let category_obj = drawings.reduce((a, item) => (a[item.category] = false, a), {})
let output = drawings.reduce((a, {name, category}) => {
// assign cat
if (!a.hasOwnProperty(name)) a[name] = Object.assign({}, {name}, category_obj)
// set to true if the correct category
a[name][category] = true
return a
}, {})
// the above makes an object, but you only want the array of values
console.log(Object.values(output))
推荐阅读
- swift - 在 Apple 的 Vision 框架中,我如何判断哪些语言可用于文本识别?
- c# - 在 Visual Studio 2019 ASP.NET 项目中访问发布时出错
- spring-boot - java.sql.SQLException:智能大对象错误springboot informix连接
- ruby - 如何为 RSpec 中的块生成对象的方法编写单元测试
- git - 如何在 github LFS(大文件存储)中获取文件的直接链接?
- bash - 大括号扩展中的 Bash 捕获
- json - T-SQL JSON_MODIFY 错误:参数数据类型唯一标识符(日期时间、金钱等)无效
- java - 从服务类执行firebase身份验证?
- perl - 从另一个文件调用一个文件会给出打印值而不是 perl 中的返回值
- c# - 匹配 url 末尾的模式的 C# 正则表达式