【问题标题】:Return new object by passing a callback function [duplicate]通过传递回调函数返回新对象[重复]
【发布时间】:2018-01-28 16:00:37
【问题描述】:

我需要实现一个函数,其中给定一个包含多个对象的数组:

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

必须返回对象属性回调函数要求的任何内容:

{
  "3": [{id: "205", name: "Bob", title: "Dr."}],
  "5": [{id: "102", name: "Alice"},
        {id: "592", name: "Clyde", age: 32}]
 }

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

例如:此回调要求返回每个对象的 name.length 加上原始对象作为其值,如果它们相同,则将其返回到同一个数组中。

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

function groupBy(arr, cb) {
  var newObj = {};
  var newArr = [];
  
  for (key of arr) {
    newObj = cb(key);
  }
  return newObj;
}

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

我自己的解决方案没有太多进展,而且我碰壁了。如果你们能帮助我,我将不胜感激。

干杯

【问题讨论】:

  • 这是学校课还是教程?这段代码在上一次经常出现...

标签: javascript algorithm logic


【解决方案1】:

您需要为每个新键创建一个空数组,您喜欢分组。

将实际对象推送到这个数组中。

function groupBy(array, cb) {
    var result = {},
        key;
  
    for (object of array) {
        key = cb(object);
        result[key] = result[key] || [];
        result[key].push(object);
    }
    return result;
}

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

console.log(groupBy(list, function(o) { return o.name.length; }));
console.log(groupBy(list, function(o) { return o.id; }));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多