从数组中删除元素,仅返回剩余的元素

时间:2019-01-24 11:15:34

标签: javascript arrays

我需要从数组中删除一个元素,然后仅返回其余元素。

我尝试使用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;
}

5 个答案:

答案 0 :(得分:0)

在您的方案中,您可以使用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);

答案 1 :(得分:0)

Array#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}`);

但是,如果您不想修改原始数组,则可以始终使用filter:

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}`);

答案 2 :(得分:0)

嘿,我遇到了一个简单的解决方案,而没有通过分解使用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;
}

答案 3 :(得分:0)

    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);

希望对您有所帮助

答案 4 :(得分:0)

  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]