无法分配给y上的属性x:不是对象-多维数组

时间:2018-08-07 08:13:32

标签: javascript arrays sorting

我正在尝试创建一个像这样的多维数组:

var minutes = [];
for (let i = 1; i < 10; i++) {
  minutes.push(i);
}
var works = [{
  startTime: 80000,
  endTime: 150000
}, {
  startTime: 200000,
  endTime: 400000
}, {
  startTime: 15000,
  endTime: 80000
}, {
  startTime: 300000,
  endTime: 500000
}];
var sumTime = 0;
var tasksByTime = [];
works.forEach((work, i) => {
  tasksByTime.push(i);
  console.log(tasksByTime);
  var difference = work.endTime - work.startTime;
  minutes.forEach((time, j) => {
    console.log(time * 60 * 1000, difference);
    console.log(i, j);
    if (difference > time * 60 * 1000) {
      tasksByTime[i][j] = (work.id);
    }
  });
  sumTime += difference;
});
console.log(tasksByTime);

我想做的是按照startTimeendTime之间的差异对对象进行排序。但是当我尝试控制台日志时,我得到:

  

TypeError:无法将属性0分配给3:不是对象

这是完整的日志:

Array [ 0 ]
NumbersPanel.js:35
60000 8498 NumbersPanel.js:40
0 0 NumbersPanel.js:41
120000 8498 NumbersPanel.js:40
0 1 NumbersPanel.js:41
180000 8498 NumbersPanel.js:40
0 2 NumbersPanel.js:41
240000 8498 NumbersPanel.js:40
0 3 NumbersPanel.js:41
300000 8498 NumbersPanel.js:40
0 4 NumbersPanel.js:41
360000 8498 NumbersPanel.js:40
0 5 NumbersPanel.js:41
420000 8498 NumbersPanel.js:40
0 6 NumbersPanel.js:41
480000 8498 NumbersPanel.js:40
0 7 NumbersPanel.js:41
540000 8498 NumbersPanel.js:40
0 8 NumbersPanel.js:41
Array [ [], 1 ]
NumbersPanel.js:35
60000 12580 NumbersPanel.js:40
1 0 NumbersPanel.js:41
120000 12580 NumbersPanel.js:40
1 1 NumbersPanel.js:41
180000 12580 NumbersPanel.js:40
1 2 NumbersPanel.js:41
240000 12580 NumbersPanel.js:40
1 3 NumbersPanel.js:41
300000 12580 NumbersPanel.js:40
1 4 NumbersPanel.js:41
360000 12580 NumbersPanel.js:40
1 5 NumbersPanel.js:41
420000 12580 NumbersPanel.js:40
1 6 NumbersPanel.js:41
480000 12580 NumbersPanel.js:40
1 7 NumbersPanel.js:41
540000 12580 NumbersPanel.js:40
1 8 NumbersPanel.js:41
Array(3) [ [], 1, 2 ]
NumbersPanel.js:35
60000 12366 NumbersPanel.js:40
2 0 NumbersPanel.js:41
120000 12366 NumbersPanel.js:40
2 1 NumbersPanel.js:41
180000 12366 NumbersPanel.js:40
2 2 NumbersPanel.js:41
240000 12366 NumbersPanel.js:40
2 3 NumbersPanel.js:41
300000 12366 NumbersPanel.js:40
2 4 NumbersPanel.js:41
360000 12366 NumbersPanel.js:40
2 5 NumbersPanel.js:41
420000 12366 NumbersPanel.js:40
2 6 NumbersPanel.js:41
480000 12366 NumbersPanel.js:40
2 7 NumbersPanel.js:41
540000 12366 NumbersPanel.js:40
2 8 NumbersPanel.js:41
Array(4) [ [], 1, 2, 3 ]
NumbersPanel.js:35
60000 66934 NumbersPanel.js:40
3 0

因此它可以进行第4次迭代。为什么会这样?

PS。很奇怪,但是当代码在浏览器中崩溃时,它却可以在代码段中运行

enter image description here

如果这很重要,我正在使用React。如果React在这里不是有效的标签,请删除它。

1 个答案:

答案 0 :(得分:1)

每个人的最外层都有一个错误:您将taskByTime的值推入i-但是iNumber,而不是{{1} }!

因此,当您稍后执行Array时,首先要检索taskByTime[i][j]itaskByTime位置的元素,然后将其视为数组-因此不起作用。

要解决此问题,只需更改您的第一个Number。不知道是否需要添加一个空数组:

push

或者如果您需要添加作品:

tasksByTime.push([]);

我认为从逻辑上讲,它应该同时适用于两者,可能其中一个要比另一个更有效