【问题标题】:How do I "filter" or otherwise restructure this data?我如何“过滤”或以其他方式重组这些数据?
【发布时间】:2016-05-17 19:31:09
【问题描述】:

我有一些表格的数据:

var Input = {
"Variable": "Variable Name",
  "Data": {
    "key_1": value_1,
    "key_2": value_2,
    "key_3": value_3,
    "key_4": value_4,
    "key_5": value_5,
  },
"Omega": value
};

我想做的是将它重构为这种形式:

var Output = [
{
    "variable":"variable name",
    values:[
          {
              "label":"key_1",
              "value": value_1
          },
          {
              "label":"key_2",
              "value": value_2
          },
          {
              "label":"key_1",
              "value": value_1
          },
          {
              "label":"key_3",
              "value": value_3
          },
          {
              "label":"key_4",
              "value": value_4
          },
          {
              "label":"key_5",
              "value": value_5
          },
    ]

我通过循环遍历输入数据并将相关的键/值对推送到输出数组,从输入数据中找到了我需要的内容。但是,这只是给了我一系列值。

我可以(虽然我还没有尝试过)循环遍历数组并将偶数索引推送到“标签”并将奇数索引推送到“值”。我可能最终会这样做,但如果有更明智的方法,例如以我所追求的形式构造输出数组,那么我宁愿这样做。

我最终要做的是在 D3.js 或 NVD3.js 中生成一个条形图,其中键作为标签,值作为条的高度。

但是,我是 d3.js 的新手,到目前为止,我无法使用给定格式的数据生成任何东西

想法?提前致谢。

[已编辑:不是的 JSON。]

【问题讨论】:

标签: javascript arrays d3.js nvd3.js


【解决方案1】:

我稍微修改了您的输入对象以具有有效的语法。您可以遍历Input.Data 的键以填充output.values 数组。

var input = {
"Variable": "Variable Name",
  "Data": {
    "key_1": 1,
    "key_2": 2,
    "key_3": 3,
    "key_4": 4,
    "key_5": 5,
  },
"Omega": 'ohm'
};

var output = {};
output.variable = input.Variable;
output.values = [];

for (var name in input.Data) {
  if (!input.Data.hasOwnProperty(name)) continue;
  output.values.push({label: name, value: input.Data[name]});
}

console.log(output);

【讨论】:

    【解决方案2】:

    我猜你想要这样的东西:

    var Input = {
    "Variable": "Variable Name",
      "Data": {
        "key_1": 1,
        "key_2": 2,
        "key_3": 3,
        "key_4": 4,
        "key_5": 5,
      },
    "Omega": 6
    };
    
    Input.values = Object.keys(Input.Data).map(function(item){ return { "label": item, "value": Input.Data[item] } });
    delete Input.Data;
    

    【讨论】:

      【解决方案3】:

      您可以对键使用循环并返回包含所需内容的新对象。

      var input = {
              "Variable": "Variable Name",
              "Data": {
                  "key_1": 'value_1',
                  "key_2": 'value_2',
                  "key_3": 'value_3',
                  "key_4": 'value_4',
                  "key_5": 'value_5',
              },
              "Omega": 'value'
          },
          output = {
              "Variable": "Variable Name",
              values: Object.keys(input.Data).map(function (k) {
                  var o = {};
                  o[k] = input.Data[k];
                  return o;
              })
          };
      document.write('<pre>' + JSON.stringify(output, 0, 4) + '</pre>');

      【讨论】:

        【解决方案4】:

        它有点神秘但功能齐全。

        var Input = {
        "Variable": "Variable Name",
          "Data": {
            "key_1": "value_1",
            "key_2": "value_2",
            "key_3": "value_3",
            "key_4": "value_4",
            "key_5": "value_5",
          },
        "Omega": "value"
        },
        
          Output = [Object.keys(Input).reduce((p,c) => {c == "Variable" ? p[c] = Input[c]
                                                                        : c == "Data" &&
                                                                          (p.Values = Object.keys(Input[c])
                                                                                            .reduce((a,k) => a.concat({label : k, value : Input[c][k]}),[]));
                                                        return p;},{})];
        document.write("<pre>" + JSON.stringify(Output,null,2) + "</pre>");

        【讨论】:

        • Cryptic 是对的……如果输出中的“值”不在引号中,它会起作用。我现在正试图解决这个问题。如果您有建议,请按我的方式提出。
        • 价值观只是关键。它是否在引号中真的很重要..?您可以像Output[0].Values 一样访问它
        【解决方案5】:

        由于dataObject,您可以使用Object.keys(data) 获取密钥集合,然后您可以使用data[key] 获取每个密钥的值。将其合并到 forEach 中,您可以做任何您喜欢的事情。

        【讨论】:

          猜你喜欢
          • 2011-04-13
          • 2021-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-21
          • 1970-01-01
          相关资源
          最近更新 更多