Javascript / Webix 将对象引用为数组

Javascript / Webix referencing objects as arrays

这主要是一个 Javascript / JSON 问题,但是如果有人知道 Webix 解决方案,我也愿意接受。

背景

我正在使用 Webix as a Javascript UI framework. Currently I'm populating a Webix Datatable 和 JSON 看起来像这样的数据:

complexData = {
  "metadata": {
    "itemno": 111222333,
    "groupid": 19,
    "name": "Blah"
  },
  "configs": [
    {
      "id": 1,
      "name": "First",
      "description": "some stuff",
      "value": 222
    },
    {
      "id": 3,
      "name": "Third",
      "description": "Foo",
      "value": 333
    }
  ],
  "system": null
}

我正在初始化我的 Datatable 组件,如下所示:

webix.ui({
    view:"datatable",
    columns:[
        { id:"id", header:"ID" },
        { id:"name", header:"Name" },        
        { id:"description", header:"Description", fillspace: true },
        { id:"value", header:"Value" }
    ],
    data: complexData.configs
});

效果很好。

你可以在这里看到它的样子:https://snippet.webix.com/4jd9cobb

如您所见,我只是 'reaching into' complexData 并引用 configs,为我的组件获取数据。

但是,(由于我需要稍后进行处理),我需要稍微更改我的数据结构。我需要 configs 中的对象根据它们的 id 进行键控,这可以是任意的。当然,这意味着 configs 现在是一个对象的对象,而不仅仅是一个数组:

complexData = {
  "metadata": {
    "itemid": 111222333,
    "groupid": 19,
    "name": "Blah"
  },
  "configs": {
    "1": {
      "id": 1,
      "name": "First",
      "description": "some stuff",
      "value": 222
    },
    "3": {
      "id": 3,
      "name": "Third",
      "description": "Foo",
      "value": 333
    }
    },
  "system": null
}

这不再呈现我的行。

这是它的样子:https://snippet.webix.com/n8ypdeia

详情

如果我 console.log 我的工作结果(数组),我得到这个:

(2) [{…}, {…}]
  0: {id: 1, name: "First", description: "some stuff", value: 222 }
  1: {id: 3, name: "Third", description: "Foo", value: 333 }
  length: 2

我的失败结果(对象的对象)是这样的:

{1: {…}, 2: {…}}
  1: {id: 1, name: "First", description: "some stuff", value: 222 }
  3: {id: 3, name: "Third", description: "Foo", value: 333 }

因此 complexData.configs 在 Javascript / Webix 中显示为单个对象而不是对象集合。

所以我的问题是:

如何以 Javsacript / Webix 知道它是集合/或数组的方式引用 complexData.configs

有没有办法让(映射?)Webix 解析 complexData.configs 以便它将其中的对象识别为数据表行?

谢谢。

Object.values()

中可以找到一个相当简单的解决方案

const complexData = {
  "configs": {
    "1": {
      "id": 1,
      "name": "First",
      "description": "some stuff",
      "value": 222
    },
    "3": {
      "id": 3,
      "name": "Third",
      "description": "Foo",
      "value": 333
    }
  }
}

console.info(Object.values(complexData.configs))

这在任何版本的 Internet Explorer 中都不支持,但是有几个 polyfills 可用