2017-07-29 94 views
1

我想访问数组中对象的键。如何访问对象数组中的动态键

对象的例子是:

var trackobj = { 
     trackees: [{ 
      john: { 
       "lat": "120000" 
       , "long": "12345" 
      } 
      , harry: { 
       "lat": "210000" 
       , "long": "5433333" 
      } 
      , sid: { 
       "lat": "420000" 
       , "long": "21345" 
      } 
    }] 
    } 

我使用的功能:

function searchTrackee() { 
     for (var i = 0; i <= trackobj.trackees.length; i++) { 
      console.log(trackobj.trackees[i]['key']); 
     } 
    } 

的预期结果我想到的是 “约翰” “哈利” “SID”。

回答

3

,你可以用一个简单的for...in声明是这样做的:

for (var i = 0; i <= trackobj.trackees.length; i++) { 
    for(var key in trackobj.trackees[i]) { 
     console.log(key); 
    } 
} 
4

我认为有以下应该可以帮助您。

function searchTrackee() { 
    trackobj.trackees.forEach(function(obj) { 
     console.log(Object.keys(obj)); 
    }); 
} 

编辑1:

我也同意@MedAli。使用map并将其存储是一个很好的习惯。然后单独打印。

function searchTrackee() { 
    var output = trackobj.trackees.map(function(obj){ 
     return Object.keys(obj); 
    }); 
    console.log(output); 
} 
2

你可以这样做:

trackobj["trackees"].map(function(a){ 
return Object.keys(a) 
}) 

所以,你可以更新你的代码,如下所示:

function searchTrackee() { 
    var results = trackobj["trackees"].map(function(a){ 
    return Object.keys(a) 
    }) 
    console.log(results) 
} 

的输出是一个数组与以下值:

["john","harry","sid"] 

var trackobj = { 
 
     trackees: [{ 
 
      john: { 
 
       "lat": "120000" 
 
       , "long": "12345" 
 
      } 
 
      , harry: { 
 
       "lat": "210000" 
 
       , "long": "5433333" 
 
      } 
 
      , sid: { 
 
       "lat": "420000" 
 
       , "long": "21345" 
 
      } 
 
    }] 
 
    } 
 
    
 
function searchTrackee() { 
 
     var results = trackobj["trackees"].map(function(a){ 
 
     return Object.keys(a) 
 
     }) 
 
     console.log(results) 
 
} 
 

 
searchTrackee();

0

您还可以使用Array#reduce来获取所有的名字。

var trackobj = {trackees: [{ 
 
      john: { 
 
       "lat": "120000" 
 
       , "long": "12345" 
 
      }, harry: { 
 
       "lat": "210000" 
 
       , "long": "5433333" 
 
      }, sid: { 
 
       "lat": "420000" 
 
       , "long": "21345" 
 
      }}] 
 
} 
 

 
var names = trackobj['trackees'].reduce((names,obj) => names.concat(Object.keys(obj)),[] 
 
); 
 
console.log(names);
.as-console-wrapper { max-height: 100% !important; top: 0; }