【问题标题】:Remove element from array and return only remaining elements从数组中删除元素并仅返回剩余元素
【发布时间】:2019-01-24 11:15:33
【问题描述】:

我需要从数组中删除一个元素并只返回剩余的元素。

我尝试使用splicefilter,但无法正常工作。

splice 只返回删除的元素,我需要相反的。

var parse_obj = JSON.parse(document.getElementById('imagens').value);
function rImagem(data){
    data = data - 1;
    document.getElementsByClassName("btn_remover")[data].style.display = 'none';
    parse_obj2 = parse_obj.splice(parse_obj.findIndex(e => e.data,1));
    new_string = JSON.stringify(parse_obj2);
    document.getElementById('imagens').value = new_string;
}

【问题讨论】:

  • 为什么不直接使用parse_obj.splice() 就地更改数组,因此一旦您运行parse_obj.splice,它将是删除项目的数组。
  • splice 返回移除的元素数组。你可以添加随机数据吗?过滤器应该工作
  • splice() 方法从数组中返回删除的元素。您正试图在数组parse_obj2 中分配这个已删除的元素。您应该做的不是为变量parse_obj2 分配任何内容,而是按原样使用parse_obj 数组。 parse_obj.splice(parse_obj.findIndex(e => e.data,1));new_string = JSON.stringify(parse_obj2);

标签: javascript arrays


【解决方案1】:

在您的场景中,您可以使用filter 过滤结果数组中不需要的索引。你传入过滤器的回调的第一个参数是当前元素ele,第二个是当前元素的索引idx

parse_obj2 = parse_obj.filter((ele, idx) => idx !== parse_obj.findIndex(e => e.data,1));

在这里,假设我想删除第三个索引处的元素,因此我会将过滤器函数回调中的当前索引与我要删除的元素的索引进行比较。它将产生一个新数组,其中包含原始数组的所有元素,但没有我想要删除其索引的元素。

var indexToRemove = 2; 
var arr = [1, 2, 3, 4, 5];
var result = arr.filter((data, idx) => idx !== indexToRemove );
console.log(result);

通过splice也可以得到同样的结果。

parse_obj.splice(parse_obj.findIndex(e => e.data,1), 1); //parse_obj is one element less.

这里是演示:

var indexToRemove = 2; 
var arr = [1, 2, 3, 4, 5];
arr.splice(indexToRemove, 1); //removes only the third element and modifies the original array in place.
console.log(arr);

【讨论】:

    【解决方案2】:

    Array#splice 实际上是您正在寻找的。问题是,splice 不会返回新数组,它会从数组中删除元素并返回已删除的元素。但是,在原始数组中,除了删除的元素之外,您将拥有相同的元素。

    let array = [1, 2, 3, 4, 5]
    
    console.log(`Array elements before splice: ${array}`);
    console.log(`Deleted elements: ${array.splice(1, 2)}`);
    console.log(`Array elements after splice: ${array}`);

    如果您不想修改原始数组,您可以随时使用过滤器:

    let array = [1, 2, 3, 4, 5];
    let toDelete = [2, 4];
    
    console.log(`Original array elements: ${array}`);
    console.log(`Elements to delete: ${toDelete}`);
    
    let newArray = array.filter(n => !toDelete.includes(n));
    console.log(`Array elements after splice: ${newArray}`);

    【讨论】:

      【解决方案3】:

      嘿,我遇到了一个简单的解决方案,没有使用 splice() 使用解构。

      const myArr = [1,2,3,4,5,6,7,8,9,10];
      
      function removeFirst(array){
      const [a, ...arr] = array; //a is never returned
      return arr;
      }
      

      【讨论】:

        【解决方案4】:
            function remove(arr,index){
            return arr.slice(0,index).concat(arr.slice(index+1,9))
            }
            
           // remove(<your array over here>,<the index of the element that you want to remove>) 
           // ex -   
            remove(myarray,0);
        

        希望对您有所帮助

        【讨论】:

          【解决方案5】:
            var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
              var filtered = array.filter(function(value, index, arr){ 
                  return value > 5;
              });
              //filtered => [6, 7, 8, 9]
              //array => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
          

          【讨论】:

          • 虽然此代码可以回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将改善答案的长期价值。
          猜你喜欢
          • 1970-01-01
          • 2013-11-12
          • 1970-01-01
          • 1970-01-01
          • 2020-04-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多