【问题标题】:Get the value based on object key in javascript [duplicate]根据javascript中的对象键获取值[重复]
【发布时间】:2019-06-26 04:28:13
【问题描述】:

我想知道如何使用javascript根据嵌套对象中的键获取值

我有一个 obj,其中包含所有国家/地区的列表,并且我有嵌套对象 list 和国家/地区代码

嵌套数组list可以加国名吗

//Expected Output
var result= [{
"cn": "TH",
"name": {
  "en": "Thailand"
  }
},{
"cn": "IN",
"name": {
  "en": "India"
  }
}]

```

```
var list=[{
"cn": "TH",
},
{
"cn":"IN",
}]

var obj={
 "SG": "Singapore",
 "CN": "China",
 "TH": "Thailand",
 "IN": "India",
 "AU": "Australia"
}

【问题讨论】:

    标签: javascript html arrays object


    【解决方案1】:

    像这样试试。

    var list=[{
      "cn": "TH",
    },
    {
      "cn":"IN",
    }];
    
    var obj={
      "SG": "Singapore",
      "CN": "China",
      "TH": "Thailand",
      "IN": "India",
      "AU": "Australia"
    };
    
    var output = list.map(
                      data => (
                            {...data, name: { en: obj[data.cn]}}
                      )
                 )
    console.log(output)

    【讨论】:

      【解决方案2】:

      是的,只需一行代码

      var result = list.map(l => ({...l, name: { en: obj[l.cn]}}))
      

      工作sample

      【讨论】:

      • “一行”在 JS 中意义不大:一行可以写出一整个库。
      【解决方案3】:

      像这样使用括号表示法:

      var list=[{"cn":"TH",},{"cn":"IN",}];
      var obj={"SG":"Singapore","CN":"China","TH":"Thailand","IN":"India","AU":"Australia"};
      
      const res = list.map(({ cn }) => ({ cn, name: { en: obj[cn] }}));
      console.log(res);
      .as-console-wrapper { max-height: 100% !important; top: auto; }

      ES5 语法:

      var list = [{"cn":"TH",},{"cn":"IN",}];
      var obj = {"SG":"Singapore","CN":"China","TH":"Thailand","IN":"India","AU":"Australia"};
      
      var res = list.map(function(e) {
        return { cn: e.cn, name: { en: obj[e.cn] }};
      });
      console.log(res);
      .as-console-wrapper { max-height: 100% !important; top: auto; }

      【讨论】:

        【解决方案4】:
        var result = list.map(country => ({
            "cn": country.cn,
            "name": {
                "en": obj[country.cn]
            }
        }));
        

        输出

        [
            {
                "cn": "TH",
                "name": {
                    "en": "Thailand"
                }
            },
            {
                "cn": "IN",
                "name": {
                    "en": "India"
                }
            }
        ]
        

        【讨论】:

          【解决方案5】:

          向对象添加新属性有两种方法:

          使用点符号 如果你知道属性的键名,本例中的key3

          obj.key3 = "value3";
          

          使用方括号表示法 这种形式允许动态给出键名。

          obj["key3"] = "value3";
          

          当键名是动态确定的时,这种形式被广泛使用。就像在这个例子中一样:

          var getProperty = function (propertyName) {
              return obj[propertyName];
          };
          
          getProperty("key1");
          getProperty("key2");
          getProperty("key3");
          

          在你的情况下

          var list=[{
                "cn": "TH",
                },
                {
                "cn":"IN",
                }]
          
                list[0].name = "value3";
          
          
          console.log("******->"+JSON.stringify(list));
          

          输出

          {"cn":"TH","name":"value3"},{"cn":"IN"}]
          

          【讨论】:

            【解决方案6】:

            var list = [{
                "cn": "TH",
              },
              {
                "cn": "IN",
              }
            ]
            
            var obj = {
              "SG": "Singapore",
              "CN": "China",
              "TH": "Thailand",
              "IN": "India",
              "AU": "Australia"
            }
            
            const result = list.reduce((acc, curr) => {
              acc.push({
                ...curr,
                name: {
                  en: obj[curr.cn]
                }
              });
              return acc;
            }, []);
            
            console.log(result);

            【讨论】:

              【解决方案7】:

              最简单的方法是通过列表映射并插入对象,如下所示:

              const result = list.map(l => l.name = {en: obj[l.cn]})

              【讨论】:

                猜你喜欢
                • 2021-07-25
                • 1970-01-01
                • 2021-09-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-08-03
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多