满足某些条件就修改之前项 删除某一项 或者后面添加一项,当只有修改时候没问题,只要有删除或者添加进数组,再之后的就会出现问题,原因是什么 应该怎么改呢
// var indextimend = video.currentTime;
special['specialEndTime'] = indextimend;
specials.push(JSON.parse(JSON.stringify(special)));
for(i=0;i<specials.length-1;i++){
var oldspecstart = specials[i].specialStartTime;
var oldspecend = specials[i].specialEndTime;
if(indextime>oldspecstart&&indextimend<oldspecend){
var endtime = specials[i].specialEndTime;
specials[i].specialEndTime= indextime;
console.log('旧的中间部分被覆盖');
specials.push({'type':specials[i].type,'specialStartTime':indextimend,'specialEndTime':endtime});
}else if(indextime<oldspecstart&&indextimend>oldspecend){
console.log('全部覆盖');
specials.splice(i,1);
console.log(specials);
}else if(indextimend>oldspecstart&&indextime<oldspecstart&&indextimend<oldspecend){
console.log('左覆盖');
}else if(indextime>oldspecstart&&indextime<oldspecend&&indextimend>oldspecend){
console.log('右半部分被覆盖');
}
}
在 JavaScript 中,数组是不可变的数据结构,也就是说,一旦创建一个数组,就不能直接修改其元素或大小。如果在修改数组后尝试删除或添加元素,JavaScript 会抛出一个 "Cannot modify array after it has been defined" 或 "Uncaught TypeError: Cannot read property 'push' of undefined" 错误,这两种错误通常在以下情况下发生:
创建数组并赋值:
javascript
let myArray = [1, 2, 3];
在创建数组后,元素只能通过 push()
方法或 unshift()
方法将其添加到数组的末尾。然而,如果你想删除一个元素,通常需要从数组的开头添加它,如下所示:
javascript
myArray.unshift(0); // 1, 0, 2, 3
这样,元素 0 将被添加到数组的开头,数组的长度变为 2。
修改数组元素:
javascript
myArray.push(4); // 1, 0, 2, 4
myArray.unshift(0); // 1, 0, 2, 4
上述代码将修改原数组的元素,因为 push()
方法会直接修改原数组,而 unshift()
方法会将数组的开头添加一个新元素。
删除数组元素:
javascript
let myArray = [1, 2, 3];
myArray.pop(); // 1, 2
在这个例子中,我们尝试删除数组中的第一个元素,但由于删除操作是对数组的 length
值进行修改,所以会抛出一个错误。正确的操作应该是:
javascript
let myArray = [1, 2, 3];
myArray.splice(0, 1); // [1, 2]
这里,我们使用 splice()
方法删除数组的第一个元素,并将其插入到数组的第二个位置,因此数组的长度变为 2。
总的来说,如果在删除或添加数组元素后试图修改或删除数组的其他元素,JavaScript 会抛出一个错误,因为数组是不可变的。如果需要在修改数组元素后删除它,必须在原始数组的开头添加它,而不能直接在修改后删除元素。如果要删除数组中的一个元素,应使用 splice()
方法,并确保删除操作不会改变数组的其他元素顺序。