Как извлечь данные из объекта без использования цикла - PullRequest
0 голосов
/ 20 декабря 2018

Это структура, которая сохраняется в базе данных.Я хочу получить только " entityInfo " напрямую, без использования цикла.

let x = {
    "12": [{
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:29:59.999Z"
        },
        {
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:49:25.000Z",

        },
        {
            "entityInfo": [{
                "entityName": "acd",
                "timeSpent": 0.028055555555555556
            }]
        }
    ]
}

Ответы [ 6 ]

0 голосов
/ 20 декабря 2018

Существует несколько подходов и возможных решений этого вопроса.Вы можете использовать карту , фильтр , уменьшить , найти , для каждого .Но каждый из внутренних элементов цикличен, другой подход заключается в том, что если вы знаете положение entityInfo в x ["12"] и хотите безопасно прочитать его.Тогда вы можете использовать такие утилиты, как эти .

0 голосов
/ 20 декабря 2018

Используйте Object.values для получения значений, а затем find для поиска всех объектов информации о сущности

var x = {
    "12": [{
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:29:59.999Z"
        },
        {
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:49:25.000Z",

        },
        {
            "entityInfo": [{
                "entityName": "acd",
                "timeSpent": 0.028055555555555556
            }]
        }
    ]
};

console.log(Object.values(x).flat().find(el => el.entityInfo));
0 голосов
/ 20 декабря 2018

Если существует только один entityInfo, вы можете использовать следующее для получения первого элемента, который имеет свойство entityInfo.

x["12"].find(i => i.entityInfo)
0 голосов
/ 20 декабря 2018

let x = {
    "12": [{
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:29:59.999Z"
        },
        {
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:49:25.000Z",

        },
        {
            "entityInfo": [{
                "entityName": "acd",
                "timeSpent": 0.028055555555555556
            }]
        }
    ]
}
// will return a value if the entityInfo object exists
var ans = x["12"].filter((val)=>{return val.entityInfo})[0]
console.log(ans)
0 голосов
/ 20 декабря 2018

Вы можете использовать инкапсулированную функцию map ().Нажмите здесь .Но вы должны спросить себя, имеет ли здесь смысл массив.

0 голосов
/ 20 декабря 2018

Если вы хотите, чтобы первый элемент в массиве 12 имел значение entityInfo, вы можете использовать find

let x = {
    "12": [{
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:29:59.999Z"
        },
        {
            "entity": {
                "id": "40ea18e6-f898-414a-96fd-b3ef5a0eb7cd"
            },
            "startTime": "2018-12-19T06:49:25.000Z",

        },
        {
            "entityInfo": [{
                "entityName": "acd",
                "timeSpent": 0.028055555555555556
            }]
        }
    ]
}

console.log(x["12"].find(a => a.entityInfo))
...