javascript - 在大量对象中改变单个对象属性的最快方法是什么?

标签 javascript reactjs optimization redux react-redux

我正在我的应用程序中创建一个类似于 Reddit 的投票系统。每个对象(线程)都有一个 score 属性和一个类似于父对象的对象数组(将其视为对线程的注释)。
这是一个简化的示例:

{
  id: '123fdx12c1',
  author: 'Anon',
  score: 1,
  users: [
    {
      id: '321fdx12c1',
      name: 'anon',
      score: 1
    },
    {
      id: 'asd123f1fd1',
      name: 'anon',
      score: 1
    }
  ]
}

现在想象一下像这样的一大堆对象。每当用户投票时,都会派发具有适当 ID 的操作来查找匹配的 ID 并更改分值。
我的做法:

case 'VOTE':
  return state.map((question) => {
    question.users = question.users.map((user) => {
      if (user.id == action.id) {
        return {
          ...user,
          voteStatus: action.voteStatus,
          score: action.score
        }
      }
      return user;
    });
    if (question.id == action.id) {
      return {
        ...question,
        voteStatus: action.voteStatus,
        score: action.score
      }
    }
    return question;
  });

它映射整个数组只是为了改变一个对象的一个​​属性。有没有更快的方法?

最佳答案

最快的是 id 查找,因此即使对于很多 id,通过 id 查找项目几乎是相同的恒定时间:

{
    '123fdx12c1' : {
        author: 'Anon',
        score: 1,
        users: [ '321fdx12c1', 'asd123f1fd1' ]
    },
    '321fdx12c1' : {
        name: 'anon',
        score: 1
    },
    'asd123f1fd1' : {
        name: 'anon',
        score: 1
    }
}

附带说明一下,一般情况下,解释型语言中的函数调用比本地代码慢。
在某些浏览器中,.map 可能比 for 循环慢 10-100 倍。

关于javascript - 在大量对象中改变单个对象属性的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46268564/

相关文章:

javascript - React - 动态表中的 OnChange 调用会产生 Uncaught TypeError

javascript - 如何使用 react-native 和 javascript 在应用程序的主页中添加弹出窗口?

C - 有一个简单的循环来进行算术计算;探查器显示这是一个瓶颈。如何加快速度?

javascript - ReactJS:获取选定值时无法读取 null 的属性 'value'

c++ - 计算快速线终点

c - clang 和 gcc 的区别

javascript - Jquery 获取 HTML

javascript - 显示/隐藏独特的 Div

javascript - 如果任何给定类使用 javascript 匹配,则从元素中删除类

javascript if 语句不起作用