【问题标题】:I need to sort an array of objects into a new object where the sort is based on the callbacks return [duplicate]我需要将一组对象排序为一个新对象,其中排序基于回调返回[重复]
【发布时间】:2017-06-11 22:11:19
【问题描述】:

我应该实现的功能是

function groupBy(array, callback) { }

该函数将根据回调的返回值对数组进行排序。

一个例子是:

var list = [{id: "102", name: "Alice"}, {id:“205”,姓名:“鲍勃”,标题:“博士”}, {id:“592”,姓名:“Clyde”,年龄:32}];

groupBy(list, function(i) { return i.id; });

返回:

{ “102”:[{id:“102”,名称:“爱丽丝”}], "205": [{id: "205", name: "Bob", title: "Dr."}], “592”:[{id:“592”,姓名:“克莱德”,年龄:32}] }

【问题讨论】:

  • JS 对象不保持顺序。所以你想要的结果也不能保证。 PS:JS中没有关联数组。
  • 是否可以存储回调的返回值并将它们作为键存储在我们返回的对象中?
  • 完全。只需创建一个新对象并使用该键和值。
  • "函数会根据回调的返回值对数组进行排序" 如果函数是排序的,那为什么叫groupBy呢?并以你的例子告诉你,你想要分组,而不是排序。请不要将这两个术语混为一谈,因为它们描述的是完全不同的任务。而且您似乎只指其中一个,而不是另一个。
  • 所以你必须实现groupBy,OK。问题是什么?你的问题是什么?目前你只描述你的任务。您既没有提出问题,也没有描述该任务的问题。

标签: javascript object associative-array


【解决方案1】:

你可以使用 Map 来维护一个有序列表

var list = [{
  id: "102",
  name: "Alice"
}, {
  id: "205",
  name: "Bob",
  title: "Dr."
}, {
  id: "592",
  name: "Clyde",
  age: 32
}];

function callBack(list) {
  var ordered = new Map();
  for (let i of list) {
    ordered.set(i.id, [i])
  }
  return ordered;
}
console.log(...callBack(list));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    相关资源
    最近更新 更多