Производительность нормализации: массив allIds против функции Object.entries - PullRequest
0 голосов
/ 26 ноября 2018

В редуксе и других ситуациях мы можем захотеть нормализовать объекты JavaScript, которые имеют реляционный характер, а не имеют глубоко вложенные объекты.

Например, в редуксе показан рецепт, который предлагает разделить ваш код следующим образом:

const byID = {
  '1': {
    some: 'object'
  },
  '2': {
    some: 'objectAgain'
  },
  '3': {
    some: 'objectAnotherAgain'
  },
};
const allIds = ['1', '2', '3'];

Redux Рекомендованный рецепт

Однако, что является преимуществом хранения этого массива allIds по сравнению с простым вызовом чего-то похожего на следующее:

Object.keys(byId);

Рецепт ключей объекта

Удерживает ли все ключи объекта как массив быстрее?Или они имеют одинаковую сложность по времени?Не будет ли удерживание каждого ключа в массиве дублированным кодом?

1 Ответ

0 голосов
/ 27 ноября 2018

Object.keys (byId) возвращает точно такой же массив, что и allIds, но цель избыточности состоит в том, чтобы хранить все данные как можно более плоскими в одном объекте , верно?Вызов метода Object.keys () вне объекта и не сохранение его будет своего рода противоположностью этому ...

var array = {
  posts: {
    byId: {
      "post1": {
        id: "post1",
        author: "user1",
        body: "......",
        comments: ["comment1", "comment2"]
      },
      "post2": {
        id: "post2",
        author: "user2",
        body: "......",
        comments: ["comment3", "comment4", "comment5"]
      }
    },
    allIds: ["post1", "post2"]
  },
  comments: {
    byId: {
      "comment1": {
        id: "comment1",
        author: "user2",
        comment: ".....",
      },
      "comment2": {
        id: "comment2",
        author: "user3",
        comment: ".....",
      },
      "comment3": {
        id: "comment3",
        author: "user3",
        comment: ".....",
      },
      "comment4": {
        id: "comment4",
        author: "user1",
        comment: ".....",
      },
      "comment5": {
        id: "comment5",
        author: "user3",
        comment: ".....",
      },
    },
    allIds: ["comment1", "comment2", "comment3", "commment4", "comment5"]
  },
  users: {
    byId: {
      "user1": {
        username: "user1",
        name: "User 1",
      },
      "user2": {
        username: "user2",
        name: "User 2",
      },
      "user3": {
        username: "user3",
        name: "User 3",
      }
    },
    allIds: ["user1", "user2", "user3"]
  }
}

var keys = Object.keys(array.users.byId);
console.log(keys); // need to call a function where i should already know what i want
var simpleKeys = array.users.allIds
console.log(simpleKeys); // way faster too

Соответствующие ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...