Каков наиболее эффективный способ получения свойств из вложенного объекта JavaScript? - PullRequest
0 голосов
/ 11 февраля 2020

Я использую API с вложенными данными. Данные отправляются небольшими страницами (<10 JSON объектов за раз), и полученная информация используется только на этой странице, но не сохраняется в течение сеанса. Я экспериментировал с Immutable JS и Native JS для хранения JSON. Моя проблема с использованием immutable заключается в том, что для отображения информации в шаблоне она будет go через серию преобразований типов, подобных этой. </p>

    JSON -> JS -> ImmutableMap -> JS

Так что я предпочел использовать native JS. Недостатком является то, что API неизменяемого JS очень удобен для извлечения поля на карте с помощью getIn (). В нативном JS я использую квадратные скобки для доступа к полю вложенного объекта.

    const A = { B : { C: D }};
    const d = A['B']['C'];

Это может быть очень многословно. Я не уверен, что неизменный JS предлагает лучшую производительность для моего варианта использования. Это не большая карта объектов, и я предполагаю, что есть некоторые издержки при преобразовании из JS в неизменяемый обратно в JS. Но я также не уверен, насколько безопасен доступ к свойствам вложенных объектов в квадратных скобках.

1 Ответ

1 голос
/ 11 февраля 2020

Доступ с точкой

Вы можете получить доступ к своим данным следующим образом:

const A = { B : { C: 'D' }};
const d = A.B.C;

Там не кажется большой разницей между доступом к свойству в скобках или с точечным оператором.

Разрушение

Вы также можете добиться того же с помощью разложения:

const A = { B : { C: 'D' }};
const { B: { C: d }} = A;

обрабатывать неопределенный

Чтобы избежать неопределенного, Вы можете использовать значения по умолчанию при деструктурировании:

const getD = ({B : { C :d } = {}} = {}) => console.log(d)
getD(undefined);// -> undefined

Или

const { B: { C : d } = {} } = {}
console.log(d); // -> undefined
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...