Javascript / Webix将对象引用为数组

时间:2018-11-02 00:10:20

标签: javascript arrays json webix

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

背景

我正在使用Webix作为Javascript UI框架。目前,我正在使用类似如下的JSON数据填充Webix Datatable

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

如您所见,我只是“进入” 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,以便将其中的对象识别为数据表行?

谢谢。

1 个答案:

答案 0 :(得分:1)

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可用