我有一个包含数组的数组:
[[], [0], []. [3], [], [6], []]这些元素位于使用可拖动JS的vue组件中。Draggable有两个属性@start和@end。每当我在数组中拖放一个元素时,都会触发。每当我拖动其中一个元素时,我都希望删除当前元素之前和之后的空数组。因此,当我拖动6时,数组应该如下所示:
[[], [0], []. [3], [6]]isVisible是在@start触发的,所以每当我选择一个元素时。如何删除数组中索引前后的元素?我想用slice?
isVisible (val, index) {
if (val[0] === 6) {
this.array.splice(this.array[index - 1], 1)
this.array.splice(this.array[index + 1], 1)
}发布于 2021-03-19 23:05:42
删除之前的元素后,其余所有元素的索引都会向下移动,因此后面的元素现在位于index,而不是index + 1。
为了避免这个问题,最简单的方法是先删除元素。
isVisible (val, index) {
if (val[0] === 6) {
this.array.splice(this.array[index + 1], 1)
this.array.splice(this.array[index - 1], 1)
}
}请注意,如果这是循环的一部分,则需要向下调整循环索引,以反映当前索引之前的元素已被删除。
发布于 2021-03-19 23:32:15
另一种方法是过滤原始数组,然后返回一个包含所需数据的新数组:
let arr = [ [], [0], [], [3], [], [6], [] ];
console.log('Source:'+arr);
function filterDragged(dragged, arr) {
return arr.filter((e,i,a)=>{
if ((a[i] && a[i].length==0) &&
(a[i+1] && a[i+1].length!=0 && a[i+1][0]===dragged))
return false;
if ((a[i] && a[i].length==0) &&
(a[i-1] && a[i-1].length!=0 && a[i-1][0]===dragged))
return false;
return true;
});
}
console.log('Result:'+filterDragged(6, arr));
console.log('Result:'+filterDragged(3, arr));
https://stackoverflow.com/questions/66710592
复制相似问题