Как получить доступ к динамическому ключу в массиве объектов

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']);
        }
    }

Ожидаемый результат, который я ожидаю, - "john" "harry" "sid".

Теги:
object
arrays

4 ответа

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. Хорошая практика - использовать карту и хранить ее. Затем распечатайте отдельно.

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; }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню