当前位置: 首页 > 知识库问答 >
问题:

将输入数组的每个元素按第一个字符分组并作为对象返回

李睿
2023-03-14

我有以下任务

给定一个字符串数组,编写一个函数,返回一个对象,该对象按第一个字符对输入数组的每个元素进行分组。

我的代码在下面。我得到一个错误((加了注释)说

TypeError:无法读取未定义的属性“0”

有人能解释一下为什么它说它是未定义的吗?

null

function groupBy(arr) { 
  var result = {};
  var container = []
  
  for (var i = 0; i < arr.length; i++) {
    var currentWord = arr[i];
    var firstChar = currentWord[0];
    var nextWord = arr[i + 1];
    var secondChar = nextWord[0]; // Error here

    if (firstChar === secondChar) {
      container.push(currentWord, nextWord)
    } else {
      container.push(currentWord)
    }

    result[firstChar] = container;
  }
  return result;
}
console.log(groupBy(['apple', 'cat', 'boat', 'card', 'bond']));

// returns { 'a': ['apple'], 'c': ['cat', 'card'], 'b': ['boat', 'bond'] }

null

共有1个答案

俞俊逸
2023-03-14

它基本上可以在一个单行程序中完成:

null

js lang-js prettyprint-override">function groupBy(arr){return arr.reduce((a,c)=>((a[c[0]]=a[c[0]]||[]).push(c),a), {}) };
console.log(groupBy(['apple', 'cat', 'boat', 'card', 'bond']));
 类似资料:
  • 如何移除第一个数组但返回减去第一个元素的数组 在我的示例中,当删除第一个元素时,我应该得到

  • 根据给定的函数对数组的元素进行分组,并返回每个分组中元素的数量。 使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的键是从映射的结果中产生的。 const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce

  • 我有一个具有以下结构的TypeScript对象数组: 我想提取数组中的属性,并将它们作为单个字符串数组。 预期结果: 我已尝试遵循以下建议: 从对象数组中,提取属性值作为数组 仅从Javascript中的对象数组返回某些属性 我尝试使用没有运气: 我尝试过使用,但运气不佳: 任何帮助都将不胜感激。

  • 我被分配了一项编程任务,但我被卡住了。其说明如下: 有一个名为“秘密圣诞老人”(给他们礼物)的游戏,有很多孩子参加。对于每个参与的孩子,都有一个来自参与孩子的秘密圣诞朋友。我必须编写一个程序,为每个参与的孩子挑选一个秘密的圣诞老人朋友。 示例:如果Bob,Alice,John和George是参与的孩子,在随机选择之后, 输出可能看起来像 具有相同输入的连续两次程序运行不应有相同的结果。 我的想法是

  • 这里是初学者。我试图找到任何问题可以解决这个问题,但我不能,所以我提前道歉,如果这最终是一个重复。 因此,我有一个Double[]名为pay,包含三个Double值(totalPay、basePay、HoursWorkd),我将其存储在一个名为paylist的ArrayList中。 我在寻找一种方法来确定平均总工资,平均基本工资和平均工作小时数,我尝试使用foreach,但它似乎不起作用。 (当用