首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除数组中索引前后的元素

问如何删除数组中索引前后的元素
EN

Stack Overflow用户
提问于 2021-03-19 22:59:55
回答 2查看 154关注 0票数 0

我有一个包含数组的数组:

代码语言:javascript
复制
[[], [0], []. [3], [], [6], []]

这些元素位于使用可拖动JS的vue组件中。Draggable有两个属性@start和@end。每当我在数组中拖放一个元素时,都会触发。每当我拖动其中一个元素时,我都希望删除当前元素之前和之后的空数组。因此,当我拖动6时,数组应该如下所示:

代码语言:javascript
复制
[[], [0], []. [3], [6]]

isVisible是在@start触发的,所以每当我选择一个元素时。如何删除数组中索引前后的元素?我想用slice?

代码语言:javascript
复制
isVisible (val, index) {
   if (val[0] === 6) {
   this.array.splice(this.array[index - 1], 1)
   this.array.splice(this.array[index + 1], 1)
}
EN

回答 2

Stack Overflow用户

发布于 2021-03-19 23:05:42

删除之前的元素后,其余所有元素的索引都会向下移动,因此后面的元素现在位于index,而不是index + 1。

为了避免这个问题,最简单的方法是先删除元素。

代码语言:javascript
复制
isVisible (val, index) {
    if (val[0] === 6) {
        this.array.splice(this.array[index + 1], 1)
        this.array.splice(this.array[index - 1], 1)
    }
}

请注意,如果这是循环的一部分,则需要向下调整循环索引,以反映当前索引之前的元素已被删除。

票数 2
EN

Stack Overflow用户

发布于 2021-03-19 23:32:15

另一种方法是过滤原始数组,然后返回一个包含所需数据的新数组:

​

代码语言:javascript
复制
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));

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66710592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档