【问题标题】:Map the fourth element(dynamic name) of a json to a new name将 json 的第四个元素(动态名称)映射到新名称
【发布时间】:2017-10-14 16:24:00
【问题描述】:

我的 Json 如下。我的 json 中有四个字段。

[
 {
    "id": "name1",
    "c1": "10",
    "c2": "20",
    "c3": "30"
        },
    {
    "id": "name2",
    "c1": "20",
    "c2": "40",
    "c3": "25"
        }
]

我想要的结果如下。

[
 {
    "id": "name1",
    "c1": "10",
    "c2": "20"
     "a1": "50"

        },
    {
    "id": "name2",
    "c1": "20",
    "c2": "40",
     "a1": "50"
        }
]

我想用新名称映射我的第 4 个元素。

【问题讨论】:

  • 不是基于 lodash 的解决方案,但类似 ​​stackoverflow.com/questions/13391579/how-to-rename-json-key
  • 将JSON对象转换为json String,然后将名称c3替换为a1。
  • 这里的字段是动态的。第四个字段可以有任何名称(不仅仅是 c3)。我需要重命名它。 .
  • 一种方法是获取数组中的第一个对象(如果存在),使用 Object.keys(obj)[3] 获取正确的第四个字段名称,然后按照其他解决方案的建议进行操作。顺便说一句,我建议编辑问题以指定此动态字段要求是您问题的一部分
  • @GrumbleSnatch 这个想法很有帮助。谢谢。

标签: json ecmascript-6 lodash


【解决方案1】:

您可以使用lodash#map 来迭代和修改集合中的每个项目。我们使用lodash#toPairs 将对象转换为键值数组,使用lodash#update 将值从集合的第三个索引的第四个值更新为['a1', '50']。最后,使用lodash#fromPairs 将其转换回对象。

var result = _.map(source, function(value) {
  return _(value)
    .toPairs()
    .update('3', _.constant(['a1', '50']))
    .fromPairs()
    .value();
});

var source = [{
    "id": "name1",
    "c1": "10",
    "c2": "20",
    "c3": "30"
  },
  {
    "id": "name2",
    "c1": "20",
    "c2": "40",
    "c3": "25"
  }
];

var result = _.map(source, function(value) {
  return _(value)
    .toPairs()
    .update('3', _.constant(['a1', '50']))
    .fromPairs()
    .value();
});
  
console.log(result);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

【讨论】:

    【解决方案2】:

    试试这个

    var jsonObj = [
     {
        "id": "name1",
        "c1": "10",
        "c2": "20",
        "c3": "30"
            },
        {
        "id": "name2",
        "c1": "20",
        "c2": "40",
        "c3": "25"
            }
    ];
    
    for (var i in jsonObj) {
      var keys = Object.keys(jsonObj[i])[3];
      delete jsonObj[i][keys];
      jsonObj[i]["a1"] = "50";
    }
    
    console.log(jsonObj);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多