Как повысить эффективность проверки повторяющихся значений «на лету» с помощью Javascript?

#javascript #arrays #reactjs #performance

#javascript #массивы #reactjs #Производительность

Вопрос:

У меня вопрос производительности для приложения React. Я реализую «страницу редактирования таблицы», пользователи должны иметь возможность добавлять несколько строк и столбцов, а затем задавать им имена, а также иметь индикаторы рядом с входными данными, являются ли эти имена пустыми или не уникальными. Структура таблицы, возвращаемая из серверной части, выглядит следующим образом

 {
  name: "table name",
  columns: [
    {
      name: "column1",
      token: "column1token"
    }
  ],
  rows: {
    ROWNAME1: {
      column1token: "value in ROWNAME1"
    }
 }
  

}

У меня есть функция предварительной обработки, которая изменяет структуру rows объекта в таблице, чтобы быть похожей на columns , которая сохраняется в состоянии компонента:

  {
      name: "table name",
      columns: [
        {
          name: "column1",
          token: "column1token"
        }
      ],
      rows: [
        {
           name: "ROWNAME1",
           token: "newtoken",
           values: {
             column1token: "value in ROWNAME1"
          }
     ]
   }
  

Каждый раз, когда пользователь добавляет новую строку / столбец, он вставляется в соответствующий массив со случайно сгенерированным token и пустым name значением. При изменении имени я проверяю в массивах, дублируется оно или нет.
Для таблиц меньшего размера это работает нормально, но для таблицы с более чем 300 строками это становится медленным.

Есть ли лучший подход к решению этой задачи? Может ли использование Map быть более эффективным, чем перебор массивов?

Комментарии:

1. Ну и где функция? Как кто-нибудь может помочь, если мы этого не видим?

Ответ №1:

Использование Map определенно было бы быстрее, чем работа с массивами. Но что-то здесь не подходит … даже при поиске по 1000 элементам Javascript должен выполнять это очень быстро. Я бы подумал, что у вас может быть БОЛЬШАЯ перерисовка react вместо небольшого обновления DOM.

Используете ли вы key свойство для каждой строки в таблице?