【问题标题】:New object based on list of values from objects [duplicate]基于对象值列表的新对象[重复]
【发布时间】:2019-02-21 19:24:57
【问题描述】:

我有对象数组:

const objects = [
  {id: 2, name: "aaa"},
  {id: 4, name: "bbb"},
  {id: 11, name: "ccc"},
  {id: 21, name: "ddd"}
];

是否有任何选项可以根据对象的 id 来创建新对象?

我想收到:

const list = {
   2: false,
   4: false,
   11: false,
   21: false
};

我可以遍历对象,但也许存在更好的方式?

【问题讨论】:

  • 为什么每个人都倾向于避免循环?迭代有什么问题?对于操作/访问/...元素数组,您总是需要迭代
  • 你到底在做什么? 14: false 是从哪里来的? 21去哪儿了?
  • @CodeDraken 对不起,这是我的错误

标签: javascript


【解决方案1】:

我喜欢为此使用 array.reduce。 Reduce 接受一个数组并将其“减少”为其他值。

var byId = objects.reduce(function(map, obj){
  map[obj.id] = obj;
  return map;
}, {})

【讨论】:

  • 谢谢。你知道它与常规循环相比有什么效率吗?
  • array.reduce 通常使用本机代码(c++)实现,我猜它甚至比 jit-ted javascript for-loop 还要快。我不会担心循环构造本身的性能,而是你在里面做什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2017-11-11
  • 2013-04-30
  • 1970-01-01
  • 2018-05-01
  • 2020-02-20
  • 1970-01-01
相关资源
最近更新 更多