高阶函数中的 Javascript 对象克隆

标签 javascript arrays object

我对 JavaScript 非常陌生,为了了解更多信息,我一直在进行 Eloquent JavaScript(第二)练习。一项特定的练习(5.3)给我带来了很多麻烦。

该练习的目标是获取一系列包含不同人的死亡日期的对象,并根据死亡日期按世纪对它们进行分组。这是我到目前为止所拥有的:

function groupBy(array, groupOf) {
  var groups = {};
  array.forEach(function(element) {
    var groupName = groupOf(element);
    if (groupName in groups)
      groups[groupName].push(element);
    else
      groups[groupName] = element;
  });
  return groups;
}

var byCentury = groupBy(ancestry, function(person) {
  return Math.ceil(person.died / 100);
});

我相信问题可以缩小到这一行:groups[groupName] = element;但我不明白为什么这是错误的。

感谢您的帮助。如果这是显而易见的,我提前道歉。

最佳答案

您需要在这一行中创建一个数组

groups[groupName] = element;

相反,您只是分配对象。由于对象没有 push方法,你的代码失败了。您可以创建一个数组,如下所示

groups[groupName] = [element];

此外,您还可以使用简写符号来写 if..else条件是这样的

groups[groupName] = groups[groupName] || [];
groups[groupName].push(element);

或者,您可以简单地写一个 if条件是这样的

if (groupName in groups === false) {
    groups[groupName] = [];
}
groups[groupName].push(element);

两者都是if条件和groups[groupName] || []确保 groups[groupName]有一个空数组,如果 groupName groups 中不存在.

groups[groupName] = groups[groupName] || [];

在这里,groups[groupName]将被评估为 undefined如果groupName未在 groups 中找到,这实际上是错误的。由于第一个表达式为假,因此第二个表达式 []将是右侧的结果。所以,如果groupName不存在,则空数组将被分配给 groups[groupName] .

关于高阶函数中的 Javascript 对象克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26436590/

相关文章:

c - 一个字符串在一个函数中突然失去了它的值(value)

javascript - 使用ajax获取json数组

java - 尝试设置单个位置时整个数组被重置

java - 在 Java 中高效地循环访问具有多个变量类型的对象数组

javascript - 如何调用 jQuery 嵌套函数

javascript - 如何获取asyncstorage中的值项?

java - 在 for 循环中将对象添加到数组中。与设置和获取。

javascript - html选择中的默认值

javascript - 在普通/纯 Javascript 中,您如何找出元素对象具有哪些可用方法或属性?

c++ - 返回一个 vector (返回类型)