【问题标题】:Get some data from nested object从嵌套对象中获取一些数据
【发布时间】:2019-08-25 00:25:33
【问题描述】:

我有这个嵌套对象(json):

const json = {
  "application": {
    "App1": {
      "cats": [
        1
      ]
    },
    "App2": {
      "cats": [
        3
      ]
    },
    "App3": {
      "cats": [
        1,
        2
      ]
    }
  },
  "categories": {
    "1": {
      "name": "FirstCategory"
    },
    "2": {
      "name": "SecondCategory"
    },
    "3": {
      "name": "ThirdCategory"
    }
  }
};

此对象有两个主要属性:applicationcategories

我想映射applicationcats 数组并获取cats 数组的每个元素的name 属性。

所以最终的结果应该是这样的:

{
   "App1": "FirstCategory",
   "App2": "ThirdCategory",
   "App3": "FirstCategory, ThirdCategory"
}

我尝试使用map函数,但主要困难在于applicaiton属性cats内部是数组(可以有多个值)。所以下面的代码不起作用:

Object.values(json.application).map(val => {
    Object.keys(json.categories).map(key => {
       //print something
    });
});

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    试试这个。

        for(let val in json.application){
          json.application[val] = json.application[val].cats.map(cat => json.categories[cat].name).join(",")
        }
    

    【讨论】:

      【解决方案2】:
      const result = Object.keys(json.application).reduce((a,key) => {
          a[key] = json.application[key].cats
              .map(cat => json.categories[cat].name)
              .join(", ")
          return a;
      }, {})
      
      1. 循环遍历应用程序的键
      2. 对于汽车上的每个键循环,以及对于每个猫从类别返回字符串值
      3. 加入猫字符串列表

      【讨论】:

        【解决方案3】:

        您可以使用Array.reduce 获得优雅的解决方案。

        const json = {
          "application": {
            "App1": {
              "cats": [
                1
              ]
            },
            "App2": {
              "cats": [
                3
              ]
            },
            "App3": {
              "cats": [
                1,
                2
              ]
            }
          },
          "categories": {
            "1": {
              "name": "FirstCategory"
            },
            "2": {
              "name": "SecondCategory"
            },
            "3": {
              "name": "ThirdCategory"
            }
          }
        };
        
        //Getting Application object
        const application = json.application
        
        //Getting Categories object
        const categories = json.categories
        
        //initializing reduce with a blank object and pushing all the keys of the application object
        //Looping over keys of application object
        const requiredOutput = Object.keys(application).reduce((out, appKey) => {
            //Setting value based on categories name
            out[appKey] = application[appKey].cats.map(id => categories[id].name)
            return out
        }, {})
        
        console.log(requiredOutput)

        PS:您可以参考this gist 以安全读取嵌套对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-11
          • 2021-10-24
          • 2017-02-13
          • 1970-01-01
          • 1970-01-01
          • 2018-05-28
          相关资源
          最近更新 更多