【问题标题】:Re-arrage JSON values from existing values从现有值重新排列 JSON 值
【发布时间】:2019-06-13 15:41:16
【问题描述】:

提供的 JSON 有点非结构化,不符合我的许多 要求。我已经尝试了很多方法,但确实需要很长时间 当我提供 100,000 条记录时

实现的代码

for (var f in stack.data) {
  var field = new Object();
  for (var o in stack.data[f]['field_values']) {
    field[stack.data[f]['field_values'][o]['field_name']] = stack.data[f]['field_values'][o]['value'];
  }
  stack.data[f]['field_values'] = field;
}
console.log(JSON.stringify(stack, null, 2));

输入 JSON:

var stack = {
  "data": [{
    "id": 950888888073,
    "name": "www.stackoverflow.com",

    "field_values": [{
        "field_name": "Newsletter?",
        "value": true
      },
      {
        "field_name": "Parent",
        "value": 950888661
      },
      {
        "field_name": "Birthday",
        "value": "2018-04-29"
      },
      {
        "field_name": "Related matter",
        "value": 1055396205
      },
      {
        "field_name": "Referral",
        "value": "Don Ho"
      },
      {
        "field_name": "Spouse",
        "value": "Wo Fat"
      }
    ]
  }]
}

预期输出:

{
  "data": [
  {
  "id": 950888888073,
  "name": "www.stackoverflow.com",
  "field_values": {
    "Newsletter?": true,
    "Parent": "Gigi Hallow",
    "Birthday": "2018-04-29",
    "Related": "2012-00121-Sass",
    "Referral": "Don Ho",
    "Spouse": "Wo Fat"
  }

有时“field_values 可以为空。也需要检查它们

     {
      "id": 950821118875,
      "name": "www.google.com",
      "field_values": [],
}

这主要是重新排列值。这里值成为键。实际上应该有一个班轮来处理这个问题,但我没有选择。

希望问题清楚

【问题讨论】:

  • 您有问题吗?
  • 在 JavaScript 中做任何事情 10 万次都会很慢。
  • 最后一个例子中的custom_field_values应该是field_values吗?
  • 刚刚更新...谢谢

标签: javascript dictionary reduce


【解决方案1】:

声明一个变量来保存数组元素可能会有所帮助,而不是每次通过循环进行 4 级索引。您还可以使用解构来提取对象的属性。

并使用{} 而不是new Object

即使这不会提高性能,它也会使代码更易于阅读。

var stack = {
  "data": [{
    "id": 950888888073,
    "name": "www.stackoverflow.com",

    "field_values": [{
        "field_name": "Newsletter?",
        "value": true
      },
      {
        "field_name": "Parent",
        "value": 950888661
      },
      {
        "field_name": "Birthday",
        "value": "2018-04-29"
      },
      {
        "field_name": "Related matter",
        "value": 1055396205
      },
      {
        "field_name": "Referral",
        "value": "Don Ho"
      },
      {
        "field_name": "Spouse",
        "value": "Wo Fat"
      }
    ]
  }]
}

for (var f in stack.data) {
  const field = {};
  const fobj = stack.data[f];
  for (var o in fobj.field_values) {
    const {field_name, value} = fobj.field_values[o];
    field[field_name] = value;
  }
  fobj.field_values = field;
}

console.log(JSON.stringify(stack, null, 2));

【讨论】:

    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2017-08-25
    • 2020-02-12
    • 2023-03-16
    • 1970-01-01
    • 2021-12-24
    • 2022-11-26
    • 2010-12-23
    相关资源
    最近更新 更多