Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从对象数组构建邻接矩阵_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 从对象数组构建邻接矩阵

Javascript 从对象数组构建邻接矩阵,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我有一个简单的JavaScript对象数组,比如 const drawings = [ { name: "Foo", category: "widget" }, { name: "Bar", category: "widget" }, { name: "Bar", category: "fidget" }, ] 等,其中名称和类别都有重复项。我想最终得到的基本上是一个对象列表(这是为了满足第三方库的接口),其中每个对象表示

我有一个简单的JavaScript对象数组,比如

const drawings = [
  {
    name: "Foo",
    category: "widget"
  },
  {
    name: "Bar",
    category: "widget"
  },
  {
    name: "Bar",
    category: "fidget"
  },
]
等,其中名称和类别都有重复项。我想最终得到的基本上是一个对象列表(这是为了满足第三方库的接口),其中每个对象表示一个名称,然后对于每个类别,根据原始列表,有一个属性为true或false。因此,对于该示例,输出为:

const output = [
  {
    name: "Foo",
    widget: true,
    fidget: false
  },
  {
  {
    name: "Bar",
    widget: true,
    fidget: true
  },
]

如果您已经知道这些类别,或者您已经按照您的建议推断出了它们,您可以这样使用:

drawings.reduce(function(acc, curr) {
    if (!acc.some(elt => elt.name === curr.name)) {
      acc.push({name: curr.name, widget: false, fidget: false})
    }
    const i = acc.findIndex(elt => elt.name === curr.name)
    acc[i][curr.category] = true
    return acc
}, [])

首先,我将遍历并创建一个类别对象,类别作为键,默认值为
false

然后可以将其指定给每个对象,并在执行时将正确的关键点设置为true

const drawings=[{name:“Foo”,category:“widget”},{name:“Bar”,category:“widget”},{name:“Bar”,category:“fidget”},]
//使category对象中的所有内容都为false
让category_obj=drawings.reduce((a,item)=>(a[item.category]=false,a),{})
让输出=绘图。减少((a,{name,category})=>{
//指派猫
如果(!a.hasOwnProperty(name))a[name]=Object.assign({},{name},category_obj)
//如果类别正确,则设置为true
a[名称][类别]=true
归还
}, {})
//上面创建了一个对象,但您只需要值数组

console.log(Object.values(output))
您是否事先知道所有类别,或者是否需要从
图形中推断出它们。当然,可以在单独的步骤中完成。在您调用
acc.push
的那一行,有没有一种方法可以在不列出所有类别的情况下完成?这就是我试图避免硬编码的原因——也就是说,我可以很容易地得到一系列类别,但不能像这样硬编码。这就是我被困住的原因。