【问题标题】:How to change the key names to values and values to key names in array of objects in javascript如何将键名更改为值,并将值更改为javascript中对象数组中的键名
【发布时间】:2016-05-20 14:27:17
【问题描述】:

我有这样的对象数组

[{
    "First Name": "fname",
    "Last Name": "lname"
}, {
    "Root cause": "root"
}, {
    "Comapany Name": "company"
}]

我想把上面的对象数组转换成这样的

 [{
    "fname": "First Name",
    "lname": "Last Name"
}, {
    "root": "Root cause"
}, {
    "company": "Comapany Name"
}]

请任何人帮助我。

【问题讨论】:

标签: javascript arrays node.js underscore.js


【解决方案1】:

应该这样做

var arr = [ {"First Name":"fname", "Last Name":"lname"},
            {"Root cause":"root"},
            {"Comapany Name":"company"}
           ];            
var newArr = [];
for(var i = 0; i < arr.length; ++i) {
    var obj = {};
    for(key in arr[i]) {
        if (arr[i].hasOwnProperty(key)) {
            obj[arr[i][key]] = key;
        }
    }
    newArr.push(obj);
}

【讨论】:

    【解决方案2】:

    您可以使用Object.keys 获取对象中的键数组。这可用于访问对象中的每个值。

    例如:

    var newArray = myArray.map(function(obj){
      var keys = Object.keys(obj);
      var newObj = {};
    
      keys.forEach(function(key){
          var newKey = obj[key];
          newObj[newKey] = key;
      });
    
      return newObj;
    });
    

    【讨论】:

      【解决方案3】:

      你也可以使用一些库来做到这一点,例如 underscore 有一个反转函数http://underscorejs.org/#invert

      【讨论】:

        【解决方案4】:

        此代码不会创建新实例,它只是反转同一对象中的键:

        var hash = { 'key1': 'val1', 'key2': 'val2' };
        
        console.log('before', hash)
        
        for (var key in hash) {
          hash[hash[key]] = key;
          delete hash[key];
        }
        
        console.log('after', hash)

        这个创建了一个新的对象,保持原来的不变:

        var hash = { 'key1': 'val1', 'key2': 'val2' };
        
        console.log('before', hash)
        
        var newHash = {};
        
        for (var key in hash) {
          newHash[hash[key]] = key;
        }
        
        console.log('new hash inverted', newHash)

        您可以创建一个函数来重用代码。

        【讨论】:

          【解决方案5】:

          你可以这样做。

          var arr1 =[{"First Name":"fname", "Last Name":"lname"},
          {"Root cause":"root"},
          {"Comapany Name":"company"}
          ]
          
          var arr2=[];
          
          for(var i=0; i<arr1.length; i++){
              
              var obj = {};
              var foo= arr1[i];
              for(var key in foo){
                 obj[foo[key]]=key;
              }         
              arr2.push(obj);
          }
          
          console.log(arr2);

          【讨论】:

            【解决方案6】:

            只需遍历所有对象数组并交换对象键的对象值:

            var a = [{"First Name": "fname", "Last Name": "lname"}, {"Root cause": "root"}, {"Comapany Name": "company"}];
            
            a.forEach(function(o) {
                for (var key in o) {
                    o[o[key]] = key;
                    delete o[key];
                }
            });
            
            console.log(a);

            【讨论】:

              猜你喜欢
              • 2019-02-09
              • 2021-09-28
              • 2011-10-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多