【问题标题】:Trouble enumerating a (dynamic) JavaScript Object枚举(动态)JavaScript 对象时遇到问题
【发布时间】:2016-09-02 07:43:31
【问题描述】:

我正在处理一个 JS 对象数组,其中包含执行 X 查询的结果。

每个查询结果都表示为一个嵌套的对象数组。

所述数组可能只包含一个成员(返回一行)或多个成员。每个成员/行可以由一个或多个字段/属性组成。

这是一个我已经 JSON.stringify-ed 的示例(请原谅我通过直接从控制台复制引入的一些转义字符):

 [
  [
    {
      "current_queries_running": "0",
      "timestamp": "2016-09-02 06:51:49",
      "guid": "8d9470cc-669b-97a2-8fd6-7bab0d0c052e"
    }
  ],
  [
    {
      "lasthour_queries_spilled_to_disk_count": "0",
      "timestamp": "2016-09-02 06:51:49",
      "guid": "d15bd886-e72c-9879-d997-f2d48af4afa6\r\n"
    }
  ],
  [
    {
      "database_name": "tpchdslitev5",
      "query_count": "56",
      "query_text": "SELECT count(distinct query) LastHour_queries_spilled_to_disk_count FROM svl_que",
      "min_execution_time": "0.00",
      "max_execution_time": "16.00",
      "average_execution_time": "0.55",
      "total_execution_time": "31.00",
      "max_query_id": 1958,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_\r\ncount": "51",
      "query_text": "select trim(database) as database_name, count(query) as query_count, max(substri",
      "min_executi\r\non_time": "0.00",
      "max_execution_time": "10.00",
      "average_execution_time": "0.29",
      "total_execution_time": "15.00",
      "max_query_i\r\nd": 1955,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "03\r\n8e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "select count(*) as\r\ncurrent_transaction_count from svv_transactions t WHERE t.loc",
      "min_execution_time": "0.00",
      "max_execution_time": "5.00",
      "\r\naverage_execution_time": "1.00",
      "total_execution_time": "9.00",
      "max_query_id": 1598,
      "last_run_date": "2016-09-01T16:00:00.00\r\n0Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database\r\n_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "select case when count(*) > 0 then 1 else 0 end as current_is_vacu\r\num_in_process ",
      "min_execution_time": "0.00",
      "max_execution_time": "6.00",
      "average_execution_time": "0.88",
      "total_execution\r\n_time": "8.00",
      "max_query_id": 1600,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-\r\n09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "query_\r\ntext": "select count(distinct l.query) as LastHour_perf_alert_count from stl_alert_event",
      "min_execution_time": "0.00",
      "ma\r\nx_execution_time": "4.00",
      "average_execution_time": "0.77",
      "total_execution_time": "7.00",
      "max_query_id": 1602,
      "last_run_dat\r\ne": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4\r\n-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "select sum(total) as LastHour_internal_b\r\nroadcasting from (select count(query) to",
      "min_execution_time": "0.00",
      "max_execution_time": "4.00",
      "average_execution_tim\r\ne": "0.66",
      "total_execution_time": "6.00",
      "max_query_id": 1601,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "even\r\nt": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "select count(*) as current_ungranted_locks_on_resources from svv_transactions t ",
      "min_\r\nexecution_time": "0.00",
      "max_execution_time": "4.00",
      "average_execution_time": "0.55",
      "total_execution_time": "5.00",
      "max_qu\r\nery_id": 1599,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid\r\n": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "select avg(dat\r\nediff(ms, starttime, endtime)) as lastHour_QueryExecutionTime_sec ",
      "min_execution_time": "0.00",
      "max_execution_time": "5.\r\n00",
      "average_execution_time": "0.55",
      "total_execution_time": "5.00",
      "max_query_id": 1595,
      "last_run_date": "2016-09-01T16:00:\r\n00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "dat\r\nabase_name": "tpchdslitev5",
      "query_count": "9",
      "query_text": "SELECT SUM(w.total_queue_time) / 1000000.0 as LastHour_WLM_Qu\r\neueTime FROM stl_wl",
      "min_execution_time": "0.00",
      "max_execution_time": "3.00",
      "average_execution_time": "0.44",
      "total_exec\r\nution_time": "4.00",
      "max_query_id": 1597,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "\r\n2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "9",
      "q\r\nuery_text": "select avg(datediff(ms, starttime, endtime)) as lastHour_UserQueryExecutionTime_",
      "min_execution_time": "0.00\r\n",
      "max_execution_time": "2.00",
      "average_execution_time": "0.22",
      "total_execution_time": "2.00",
      "max_query_id": 1596,
      "last_ru\r\nn_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd\r\n-69d4-94d27b597f2f"
    },
    {
      "database_name": "tpchdslitev5",
      "query_count": "56",
      "query_text": "select count(*) as current_Queries\r\n_Running from stv_recents where status = 'Runn",
      "min_execution_time": "0.00",
      "max_execution_time": "1.00",
      "average_executi\r\non_time": "0.01",
      "total_execution_time": "1.00",
      "max_query_id": 1956,
      "last_run_date": "2016-09-01T16:00:00.000Z",
      "aborted": 0,
      "event": null,
      "timestamp": "2016-09-02 06:51:49",
      "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f"
    }
  ]
]

在上面的示例中,我正在处理 3 个结果集。前两个结果集包含一行作为有效负载,最后一个包含 11。

我需要将每一行解构为一个(或多个)键/值对,并用相关的时间戳和 GUID 进行修饰。对于前两个结果集,事情是直截了当的,因为我有一个记录和一个键/值对可以使用。

我需要处理形状未知的结果集这一事实使事情变得更加困难。在第三个结果集中,我需要将 11 行中的每一行分成 11 个键/值对(11 行,每行 11 个字段,不包括 guid 和时间戳)

这就是我最终需要达到的目标...

这似乎是对 for 和/或 for for..in 的一个非常直接的练习,但我在提取属性键和属性值时遇到了问题。

myObject.length

返回 3。当然。

myObject[0].length

值 = 1... 对。

myObject[2][3].query_count

值 = 9.... 还是不错的。但我不会提前知道钥匙。在我遍历我的 X(在本例中为三个)结果集对象并进入每个包含的 y-z(1 到 11)行之后,我如何实际检索代表我的“列名”和“列”的键和值价值观”?

我一直盯着这个看太久了,我的大脑不再合作。我知道当有人将我推向正确的方向时,答案将是显而易见的,但我需要这种推动。

提前致谢!

【问题讨论】:

  • 太多令人困惑的信息。你想用这个对象数组做什么?
  • 您能否发布您已经尝试过的代码以及任何错误?
  • 尝试将您的问题分解成更多的小块。这是完全无法理解的。您的问题是遍历数组的元素,然后在对象属性中,并构建一个新数组吗?
  • 请添加想要的结果结构。用 guid 和时间戳装饰是什么意思?

标签: javascript arrays javascript-objects


【解决方案1】:

您的问题有些不清楚,但如果您尝试获取给定对象的键/值对,请尝试以下操作:

var obj = ...;
for (var key in obj) {
  if (obj.hasOwnProperty(key)) { // I don't think this is necessary for parse'd JSON
    var value = obj[key];
    // do something with key and value...
    // maybe add to your table under the key's column? unclear
  }
}

【讨论】:

  • 小心点。您还将获得原型属性。
  • 我以为这是JSON.parse'd,但我会更新我的答案
  • 别忘了if (obj.hasOwnProperty(key)) 在 for 循环中。
  • 这对通过JSON.parse 获得的对象有影响吗?对我来说,for...in 没有枚举Object.prototype 的属性。
【解决方案2】:

也许您正在寻找所有分开的项目。

var data = [[{ "current_queries_running": "0", "timestamp": "2016-09-02 06:51:49", "guid": "8d9470cc-669b-97a2-8fd6-7bab0d0c052e" }], [{ "lasthour_queries_spilled_to_disk_count": "0", "timestamp": "2016-09-02 06:51:49", "guid": "d15bd886-e72c-9879-d997-f2d48af4afa6" }], [{ "database_name": "tpchdslitev5", "query_count": "56", "query_text": "SELECT count(distinct query) LastHour_queries_spilled_to_disk_count FROM svl_que", "min_execution_time": "0.00", "max_execution_time": "16.00", "average_execution_time": "0.55", "total_execution_time": "31.00", "max_query_id": 1958, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "51", "query_text": "select trim(database) as database_name, count(query) as query_count, max(substri", "min_execution_time": "0.00", "max_execution_time": "10.00", "average_execution_time": "0.29", "total_execution_time": "15.00", "max_query_id": 1955, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select count(*) ascurrent_transaction_count from svv_transactions t WHERE t.loc", "min_execution_time": "0.00", "max_execution_time": "5.00", "average_execution_time": "1.00", "total_execution_time": "9.00", "max_query_id": 1598, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select case when count(*) > 0 then 1 else 0 end as current_is_vacuum_in_process ", "min_execution_time": "0.00", "max_execution_time": "6.00", "average_execution_time": "0.88", "total_execution_time": "8.00", "max_query_id": 1600, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select count(distinct l.query) as LastHour_perf_alert_count from stl_alert_event", "min_execution_time": "0.00", "max_execution_time": "4.00", "average_execution_time": "0.77", "total_execution_time": "7.00", "max_query_id": 1602, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select sum(total) as LastHour_internal_broadcasting from (select count(query) to", "min_execution_time": "0.00", "max_execution_time": "4.00", "average_execution_time": "0.66", "total_execution_time": "6.00", "max_query_id": 1601, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select count(*) as current_ungranted_locks_on_resources from svv_transactions t ", "min_execution_time": "0.00", "max_execution_time": "4.00", "average_execution_time": "0.55", "total_execution_time": "5.00", "max_query_id": 1599, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select avg(datediff(ms, starttime, endtime)) as lastHour_QueryExecutionTime_sec ", "min_execution_time": "0.00", "max_execution_time": "5.00", "average_execution_time": "0.55", "total_execution_time": "5.00", "max_query_id": 1595, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "SELECT SUM(w.total_queue_time) / 1000000.0 as LastHour_WLM_QueueTime FROM stl_wl", "min_execution_time": "0.00", "max_execution_time": "3.00", "average_execution_time": "0.44", "total_execution_time": "4.00", "max_query_id": 1597, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "9", "query_text": "select avg(datediff(ms, starttime, endtime)) as lastHour_UserQueryExecutionTime_", "min_execution_time": "0.00", "max_execution_time": "2.00", "average_execution_time": "0.22", "total_execution_time": "2.00", "max_query_id": 1596, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }, { "database_name": "tpchdslitev5", "query_count": "56", "query_text": "select count(*) as current_Queries_Running from stv_recents where status = 'Runn", "min_execution_time": "0.00", "max_execution_time": "1.00", "average_execution_time": "0.01", "total_execution_time": "1.00", "max_query_id": 1956, "last_run_date": "2016-09-01T16:00:00.000Z", "aborted": 0, "event": null, "timestamp": "2016-09-02 06:51:49", "guid": "038e8b57-aa5c-81dd-69d4-94d27b597f2f" }]],
    result = [];

data.forEach(function (a) {
    a.forEach(function (b) {
        Object.keys(b).forEach(function (k) {
            var o = { guid: b.guid, timestamp: b.timestamp };
            if (k !== 'guid' && k !== 'timestamp') {
                o.key = k;
                o.value = b[k];
                result.push(o);
            }
        });
    });
});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多