Javascript 第行出现类型错误:无法读取属性';推动';未定义的

Javascript 第行出现类型错误:无法读取属性';推动';未定义的,javascript,arrays,Javascript,Arrays,我在运行它时遇到以下错误:“第180行的Type error:cannotreadproperty'push'of undefined”。不确定这是否是因为我的代码中有错误,或者我没有考虑某些边缘情况(即数组为空)。我还认为输出在倒数第二行是未定义的,因为const的作用域被阻塞,因此JS解释器将无法访问指定的输出值。但是将其更改为let并没有产生任何影响,同样的错误仍然出现 我试图创建一个函数,它接受数组和回调,并返回一个对象。函数将遍历数组并对每个元素执行回调。回调的每个返回值都将保存为对象

我在运行它时遇到以下错误:“第180行的Type error:cannotreadproperty'push'of undefined”。不确定这是否是因为我的代码中有错误,或者我没有考虑某些边缘情况(即数组为空)。我还认为输出在倒数第二行是未定义的,因为
const
的作用域被阻塞,因此JS解释器将无法访问指定的输出值。但是将其更改为
let
并没有产生任何影响,同样的错误仍然出现

我试图创建一个函数,它接受数组和回调,并返回一个对象。函数将遍历数组并对每个元素执行回调。回调的每个返回值都将保存为对象上的键。与每个键关联的值将是一个数组,由传递到回调时产生该返回值的所有元素组成

function groupBy(array, callback) {
//declare obj
  let obj = {}
  let value = [];
  //iterate through array and perform callback on each ele can accomplish this w/ for loop
  for (let i = 0; i < array.length; i++) {
    let key = array[i];
    // value will be an array that you're going to push output into
      //return value = callback(array[i]) save this as a key to the obj
    let output = callback(key);
  }
  obj[value].push(output);
//return obj
  return obj;
}

//Test
const decimals = [1.3, 2.1, 2.4];
const floored = function(num) { return Math.floor(num); };
console.log(groupBy(decimals, floored)); // should log: { 1: [1.3], 2: [2.1, 2.4] }
函数groupBy(数组、回调){
//申报obj
设obj={}
设值=[];
//迭代数组并对每个元素执行回调可以完成这个w/for循环
for(设i=0;i
您已经创建了两个变量。 一个是对象(obj),一个是数组(值)。 但是您试图将数据推送到对象而不是数组上(推送对对象无效)

而不是:
obj[value]。推送(输出)
你想要的是:
obj[key]=输出


我不认为你的回电会给你你想要的。我认为还有更多的工作要做,但希望上面的内容可以解除您的卡滞。

您的
obj
被初始化为空对象。它内部的任何元素都不会有
push
方法。我指的是行
obj[value].push(输出)。obj初始化为空,因为它就是这样启动的。我试图做的是将调用键(在本例中为数组的每个元素)上的回调生成的值推送到对象中。有没有更好的方法你应该在推之前初始化你的对象。例如-
obj[value]=[]
谢谢,这帮我解决了这个问题。这里的key takeaway放下push并在循环内使用obj[key]=output将每个元素作为键分配给输出值。事实证明,回调也按预期进行了。哦,太棒了。我想我一定是误解了回电话的内容。很高兴你把它整理好了!