【问题标题】:How to transform attribute values into keys? [duplicate]如何将属性值转换为键? [复制]
【发布时间】:2019-04-21 12:05:17
【问题描述】:

我有一个 JSON 格式。

var input = [
{status:"good", state: "NY"},
{status:"bad", state: "FL"},
{status:"decent", state: "CA"}
]

我想把它转换成如下格式的对象:

myObj = {NY:"good",FL:"bad",CA:"decent"}

我想要这个的原因是我可以轻松获取 myObj.NY 值。

【问题讨论】:

    标签: javascript jquery json


    【解决方案1】:

    短小精悍

    var input = [
      {status:"good", state: "NY"},
      {status:"bad", state: "FL"},
      {status:"decent", state: "CA"}
    ]
    var obj = {};
    input.forEach(function(k) {
      obj[k.state] = k.status;
    });
    console.log(obj);

    【讨论】:

      【解决方案2】:

      您可以尝试使用“Object.assign”和“Array.map”以及如下所示来达到您想要的结果

      var input = [
      {status:"good", state: "NY"},
      {status:"bad", state: "FL"},
      {status:"decent", state: "CA"}
      ]
      
      let res = Object.assign(...input.map(({ state, status}) => ({ [state]: status })))
      
      console.log(res)

      【讨论】:

        【解决方案3】:
        var myobj = {}; 
        Input.forEach(function (i) { myobj[i.status] = i.state;}
        

        【讨论】:

        • Input.foreach 应该是input.forEach
        【解决方案4】:

        您可以使用数组解构对该数组执行简单的forEach() 循环,以使您的代码简短而简单。

        var input = [{
            status: "good",
            state: "NY"
          },
          {
            status: "bad",
            state: "FL"
          },
          {
            status: "decent",
            state: "CA"
          }
        ];
        var res = {};
        input.forEach(({state, status})=> res[state] = status);
        console.log(res);

        【讨论】:

          【解决方案5】:

          使用Array.prototype.reduce()

          var myObj = input.reduce( (r,x) => { r[x.status] = x.state ; return r }, {})
          

          【讨论】:

            【解决方案6】:

            这也可以使用map 来完成,通过[key] 语法分配对象键:

            var input = [
            {status:"good", state: "NY"},
            {status:"bad", state: "FL"},
            {status:"decent", state: "CA"}
            ]
            var myObj = Object.assign({}, ...input.map(item => ({
                [item.state]: item.status
            })));
            console.log(myObj);
            

            https://jsfiddle.net/gL6bcqm1/1/

            【讨论】:

            • myObj 将是一个对象数组,而不是单个对象。这里也不需要使用Object.assign
            • 哎呀,对不起,误解了这个问题。感谢您指出!
            猜你喜欢
            • 2011-04-30
            • 2020-01-06
            • 2017-09-03
            • 2013-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多